图解阻塞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选一个线程去执行。
热门推荐
千川粉与普通粉的差异解析:来源、性质与用途的全面对比
代表建议严禁电动车骑行人行道,保障行人安全,维护城市秩序
探访姜萍老家:其家庭年收入中等,上中专不是缺学费
AMD显卡 vs 英伟达显卡:全面性能对比与选择指南
谁说省油只能靠技术?这些保养细节能让油耗直降15%
国画尺寸一览表:国画常用尺寸对照表
糜烂性胃炎伴胆汁反流:治疗后多久需要复查?
匹维溴铵片的功效与作用
有了小宝宝装修一定注意这4点!否则后悔都来不及!
2025年亚洲杯乒乓球赛:中国队强势领跑,新星闪耀
中医中药药效检测科
什么是光谱分析
如何选择适合1.5米床的被子?
揭秘明朝第三个首都:朱元璋的故乡凤阳
济潍高速直达千亩连翘花海!淄博绝美春游攻略来袭,一起邂逅春的世界!
怎么申请司法鉴定费用减免呢
车辆残值怎么算?车辆报废残值归谁?
突发性耳鸣怎样治疗最好
梦见坟地是什么意思
A股上市公司2024年分红图谱:高频度 多样化 制度化
大学生活的正确打开方式
哪些药物可以帮助怀孕母猪缓解腿疼痛?
梦见家庭聚会是什么意思
烤箱自制酸奶
正确的长笛持笛姿势
伤口清创后,如何正确清洁和更换敷料有哪些需要注意的事项?
高校毕业生如何申请创业担保贷款?
人工智能如何陪学生读书
补牙之后牙齿出现酸胀感是否属于正常现象?医生解答与建议
教学设计中的课程整合和衔接