图解阻塞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选一个线程去执行。
热门推荐
如何利用任务待办提醒提高工作效率?
A股:如果你手中股票当天涨停板反复打开,你明白是怎么回事吗?
海胆:海洋中的“紫色仙人球”
炙甘草汤不适合什么人
肝脏常用检查方法
奶蓟草护肝的真实效果如何
如何改掉自尊心太强的毛病
平型关战役:师级规模、教科书水准的指挥、难以估量的价值
什么是游击战?其特点和应用场景解析
认识人体自愈力:科学修复身体机能的神秘力量
70岁老人是否适合进行牙齿种植?种植牙的注意事项有哪些?
如何科学补水:打造水润健康的生活
探索四川绵阳:自然风光、历史文化与美食之旅
爱因斯坦:发现问题比解决问题更重要!
揭秘减速器核心技术:从设计到应用的全面解析
口腔医疗乱象该治治了
五指岭在哪:探寻郑州五指岭景区及更佳日出观赏地
如何理解股指期货交割的含义?这种含义对期货市场有何作用?
非线性回归和逻辑回归详解:从基础概念到神经网络应用
利咽开音——胖大海
不锈钢锅安全使用指南:这些细节关乎家人健康
什么是拆股?
“令堂”和“令尊”的区别是什么吗?看完这个,你就不会弄错了!
经营性停车场全覆盖,余位查询、终点导航“一键触通”
王者荣耀S38赛季中路英雄调整与推荐:四位法师助你轻松上分
联合国可持续发展目标(SDGs)目标之一:减少不平等
交易回测软件怎么做回测?让你的交易策略更优
减肥期间可以吃哈密瓜吗?医生的专业建议来了
老祖宗拼命进化出消化碳水的能力,你现在倒是要戒了……
ASP2053对比1.8566:两种模具钢材料的技术解析