图解阻塞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选一个线程去执行。
热门推荐
一次性泡茶袋使用安全性与潜在健康影响解析
多发性肋骨骨折患者的当代管理:您需要了解的内容
揭秘古代死士:从招募到培养的完整链条
民事诉讼中提供虚假证据会被处罚吗?
中欧班列运输路线对比:哪条最适合你的业务?
抽水马桶冲水无力之原因及解决办法 马桶原理是什么?
2025年房地产市场新趋势:数据解析背后的行业动向
安徽省内徽派古建筑景点摄影图片推荐
肿瘤患者提高免疫力,十大优质蛋白你要了解,不要再补错了!
虚幻引擎材质系统完全指南:从基础属性到PBR贴图实战
梅州五华县:实干笃行方能“华”丽转身
集团母子关系如何进行有效证明?这种有效证明的方式有哪些依据?
院子里栽紫荆树好不好
世经论坛报告:生成式AI治理,一种360°全景式的弹性政策和监管方法
财务管理类岗位职责
受害者和加害者:如何理解和解决人际关系中的冲突
预防未成年人网络沉迷:这些方法可以有效保护孩子上网安全
同样是轮滑鞋,价格怎么相差那么多?一篇文章帮你搞懂轮滑鞋选购要点
中国算力产业深度研究报告:现状与“十五五”时期发展趋势
「喜自在遊戲」親子小組 助父母成陽光家長 打開焦慮孩子心扉
会计借贷关系是什么
诺西那生钠(nusinersen)国内购买指南
温度近600摄氏度、瞬间引燃纸张,“取暖神器”暗藏危险
塑钢门窗和铝合金门窗哪个好?一文详解两种门窗优劣与选购要点
公积金怎么还房贷?“月冲”和“年冲”
柯基犬喂养指南:如何科学合理地喂养柯基犬,保持健康体重
皮肉分离的真相丨如何有效避免,实现精准超声抗衰?
A股回购持续升温,注销式回购渐成潮流
宗族文化的真諦——祠堂
超详细的自动化测试流程