图解阻塞IO和非阻塞IO及多路复用机制
创作时间:
作者:
@小白创作中心
图解阻塞IO和非阻塞IO及多路复用机制
引用
CSDN
1.
https://blog.csdn.net/CharJay_Lin/article/details/84476753
IO
即Input Stream与Output Stream。
TCP通信
在介绍IO之前,我们先了解一下TCP协议。对于TCP通信来说,每个TCP的socket内核里面都有一个接收与发送缓冲区。
数据在应用层的send()通过数据复制进入到socket内核的TCP发送缓冲区,发送端与接收端的socket之间进行通讯(传输层),接收端接收到TCP报文之后存入socket接收缓冲区,用户进程(应用层)通过receive读取缓冲区的数据。
如果接收缓冲区满了会通知TCP发送端关闭窗口,保证接收端的缓冲区不会被溢出(利用滑动窗口来做)。
在有了以上的基础之后,我们再来理解阻塞与非阻塞IO。
阻塞IO
如果接收缓冲区的数据为空的时候,那么receive调用socket的read方法就会处于阻塞状态,直到有数据过来。
同样,对于写来说,如果发送缓冲区满了,那么调用socket的write方法就会处于阻塞状态,直到报文送到网络上。
这就是阻塞IO!
非阻塞IO
阻塞IO会一直等待,所以非阻塞IO是用来解决IO线程与socket之间的解耦问题(引入事件机制),如果socket发送缓存区可写的话会通知IO线程进行write,同样如果socket的接受缓冲区可读的话会通知IO线程进行read。
这就是非阻塞IO!
IO多路复用
而这个事件机制就是IO多路复用的模型,在Linux可以使用select与epoll,可以产生多个线程去处理,如果线程去读的时候发现TCP缓冲区还没准备好的话,线程不会等待,会丢到select调度系统里面(调度吸引里面有n个这样的线程),如果TCP缓冲区准备好的就会发送事件通知select,从select选一个线程去执行。
热门推荐
平板电脑音质之探究(解析平板电脑音质的优劣与关键因素)
华为的运营流程、使能流程和支撑流程详解
应届生落户北京的条件全面解析
台式机内存条选购指南:DDR代数、频率、容量等关键参数详解
男士睡觉的最佳姿势
父母出资买房登记结婚时房产归属的法律分析与实务操作
三相异步电动机工作原理
6个缓解腰椎间盘突出的伸展动作【附动图】
盐酸普拉克索片功效与作用
模拟情感和人类关系:AI数字人的新前沿
从“听泉鉴宝”分析小众主播出圈路径及舆论争议焦点
从入门到入土:计算机视觉CV学习路线图
500兆宽带测速标准详解
鲁菜十大经典名菜,每一口都是历史的味道!
肺结节患者是否需要进行定期筛查
“书院之城”“博物馆之城”双轮驱动 文化协同出圈出彩
掌握高音演唱技巧,享受音乐带来的快乐与成就感
宝可梦这些稀有的地区形态,变成了唯一属性组合,你都知道哪些?
ArcGIS如何新建数据库并添加字段
最实用的小家电分享 十种好用的居家小家电盘点
【药食同源】消食化积,降气化痰之“莱菔子”
短篇网络文学写作正在崛起
网球肘和高尔夫球肘术后康复指南
杨志:绰号青面兽,梁山一百零八将之一,上应天暗星
高二学生应注意的学习问题
一周打完1000场官司,中科院发布首个AI法庭AgentCourt
VS Code如何加入或配置一些常用的代码编辑功能
项目管理消防工作怎么干
罗墨轩:行者与花和尚——《水浒传》的两个独特绰号及其文学意蕴
男人面相显年轻都不简单