图解阻塞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选一个线程去执行。
热门推荐
香港太平山顶:554米高处俯瞰维港,日落夜景最佳观赏地
利润分配表编制要点:数据准备到试算平衡
楞严咒全解:作用、好处与念诵禁忌
“一县一公司”模式引领,玉田城乡公交实现100%覆盖
八达岭长城一日游:打卡文化街和野生动物世界
红枣煮水,气血满满!
猫山王榴莲搭上中国“快车”:中马钦州产业园助力热带水果进口
假性近视易被忽视,中医特色疗法助防治
高达新作女主伊莉亚:从战士到领袖的女性力量崛起
车牌尾号里的吉祥寓意:8、6、9最受欢迎
注射胶原蛋白能保持多久?这些因素决定维持时间
鲜花祭祀,过个绿色清明节
从浇水到控温:让苔藓旺盛生长的四大养护要点
冬日打卡重庆天坑地缝,雪景美食两不误
避开人流高峰,嵩鼓码头出发的鼓浪屿完美一日游
季德胜蛇药片:300年传承的战地急救神药
别扔三文鱼头!营养价值堪比鱼肉,两种焗制方法详解
石橄榄:养生界的宝藏植物🔥
资产负债率、ROE、销售增长率:解读企业财务健康的关键指标
2024名人堂·年度人文榜“十大作家”名单发布
三大球运动会的山东含量也太高了!夺得四冠两亚,六队全进决赛!
主力资金连续减仓,城发环境估值优势显现
LBMR技术助力文物活化,山西介休发布张壁古堡沉浸展
脑出血康复期间的注意事项,你知道多少?
别被“红润”欺骗!这样挑选石榴更甜更水
社保医保新调整即将来临,2024年9月更新,影响您的个人利益
巴黎奥运会打造全球最大绿色餐厅,80%食材本地采购
英语中"then"的多种用法详解:从时间顺序到逻辑推断
牛油VS菜籽油:解密川渝火锅的风味密码
道路客运汽车驾驶员资格证怎么考?