图解阻塞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选一个线程去执行。
热门推荐
成都大学城医院眼科:儿童近视如何治疗?
如何计算金条的市场价值?这种计算对贵金属投资有何指导意义?
酒桌敬酒顺序大揭秘:传承文化,展现修养
从瑜伽到太极八极:一位70后女子的武术传承之路
如何办理车辆的行驶证?办理过程中需要准备哪些材料?
抓南极企鹅犯法吗:南极地区的法律法规与动物保护
中国极地科考40年,未来如何“破冰”?
普陀山拜佛顺序路线图及注意事项
DMI和增程式技术详解:系统结构、动力表现与适用场景全解析
干细胞社会公众认知提升方案
保险经纪人揭秘:如何为自己和家人选择合适的保险计划?
春天脸部过敏怎么办?3个简单方法快速缓解红肿瘙痒!
盐生植物:能在高盐环境中生存的特殊植物
朱自清的文学常识
普洱熟茶存放多长时间最佳?揭秘普洱熟茶陈化过程与品饮指南
税务申报时间过了没有申报怎么办理
汉字"彦"的详细解释
供需关系改变明星效应下降 珍珠消费市场回归理性
熬夜对肝的危害有哪些
数字隔离器和光耦芯片的高压隔离测试方法
苹果笔记本下键失灵怎么修复?有哪些常见原因?
广西金花茶:茶族皇后的金色传奇
揭秘潮汕人“财富密码”:英皇集团杨受成的崛起之路
商标保护知识有哪些类型
脑骨瘤是什么意思
重庆到北京火车票仅44元,业内人士:对部分非紧张时段和方向实行优惠票价
新能源车充电难题:3140万车主共享346万公共充电桩
电脑正常启动但是黑屏不显示桌面,一一排查快速解决,分享5招
宁波前童:金秋稻田迎丰收
皮肤容易或频繁出现淤青,割伤后不容易止血?可能是血小板减少