图解阻塞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选一个线程去执行。
热门推荐
混合百万专家:参数高效专家检索PEER技术详解
桃花的花语及其意义(深入探究桃花的象征意义和文化内涵)
机器学习之前需要哪些基础科目的学习呢
阐教和截教重要人物名单整理
消金公司新规正式施行,中小银行入局难度提升
如果宇宙中的温度达到绝对零度零下273.15度,时间就停止了?
逻辑分析仪的使用-以STM32C8T6控制SG90舵机为例
摩罗丹可以护胃吗
INFP对谁有着致命吸引?
儿童服饰出口标准检测指南
明朝官员蒋德璟简介:博学强识几乎到惊人的程度
国际观察丨德国联盟党胜选后依旧面临政治难题
发黑的银首饰应该如何清洗?
2024年12月全球车辆法规动态
朱允炆削藩时,为什么第一个不削燕王朱棣,反而拿周王开刀?对此你怎么看?
“鼓励农民放弃宅基地进城买房”背后:有偿退出已试点多年 专家称保障比奖励更有用
如何分析一个城市的发展潜力?在选择居住地时应该考虑哪些经济指标?
审计报告意见类型及应用解析
高盛:俄乌停火不会导致俄石油出口大幅增加
自然人独资和一人有限责任公司有什么区别
2025年丧葬费抚恤金标准上调,40年工龄,养老金6000元,多少钱?
气血亏虚吃什么中成药见效快一点
清朝是如何完成对蒙古地区的治理的?用了什么计划?
三种实用呼吸技巧:478呼吸、四方形呼吸和2+4呼吸
中药治病一般多久见效
央视揭秘特大"黄牛"倒票案:45人被抓,17款"外挂"被查
Apache Spark 核心原理、应用场景及整合到Spring Boot
《童诗教学实务》课件
数字化时代班组长管理能力提升探究
一艘72亿元!“泰坦尼克号”复制项目将重启?