图解阻塞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选一个线程去执行。
热门推荐
看看一战时各国的军费开支,才知道美英德法才是一个级别
自动档车的刹车技巧有哪些?这些技巧如何提高驾驶安全性?
智能制造在太阳能硅片制造中的探究与应用
人力资源被申诉怎么办?
甲亢很严重怎么治疗
科技助听生活——听力重建的黑科技
价格相差不大的轰-20轰炸机和B-2轰炸机的差距有多大?
婚前财产保护指南:如何做好婚前婚后财产隔离?
项目主办和领办的区别
《破·地狱》香港票房破7500万:生死议题引发社会共鸣
努力日文:用「頑張る」提升你的日語表達力
宝可梦:高效刷取努力值攻略,打造高能力宝可梦
轮毂刮伤什么程度需要修复
如何通过视觉设计让PPT汇报更吸引人?
这10个方法能帮助您调节好心情
30年期国债收益率创近20年来新低,意味着什么?
豌豆苗菜的种植方法
催芽技巧:如何掌握温度、湿度与光照,实现高效催芽?
袁崇焕:一位民族英雄的功过与争议
如何快速去除甲醛味道?除了通風還有什麼方法?
日本人月薪一般是多少?行业差异、地区差异及薪资水平调查
小米手机如何进入fastboot
守护千年文脉 擦亮长江百景——长江国家文化公园(江苏段)建设扎实推进
贷款买房如何加名字?不同阶段的操作指南
被骂上热搜!卖身国外的“国民啤酒”,这次又栽了
Docker持久化存储详解:UnionFS、数据卷与三种持久化方式
文化丨多彩贵州:文化千岛的魅力出圈
125%关税压顶,对我国半导体精密陶瓷行业有何影响?
如何在不新增功能的情况下提升试用转化率?
全国零碳园区建设进展:从政策蓝图到实践探索