扫码阅读
手机扫码阅读
做个家务,让我搞懂了 Linux I/O 模型
![](/theme/default/default/images/main/eye-open.png)
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
![](/theme/default/default/images/main/icon-jing.png)
咸鱼运维杂谈
扫码关注公众号
摘要
在Linux系统中,I/O(输入输出)涉及文件和网络数据流的处理。无论是文件I/O还是网络I/O,数据传输过程都包含两个阶段:首先数据被读取到操作系统的内核缓冲区,然后被拷贝到程序缓冲区,之后程序才能访问数据。
阻塞I/O
在阻塞I/O模型中,进程在数据被放入内核缓冲区期间,以及内核缓冲区的数据被拷贝到程序缓冲区期间,都是阻塞的,这意味着进程在等待操作完成期间无法执行其他任务。
非阻塞I/O
非阻塞I/O模型中,进程在等待数据放入内核缓冲区时不是静止不动,而是会不断地检查状态,尽管这可能是无用功,但这至少显示出了进程在尝试提高效率。
I/O复用
I/O复用模型允许进程同时监听多个数据流,虽然在数据拷贝到程序缓冲区期间进程仍然是阻塞的,但在数据到达内核缓冲区之前的轮询监听阶段,效率得到了提升。
信号驱动I/O
信号驱动I/O模型在第一阶段,即数据读取到内核缓冲区的过程中,允许进程执行其他任务,只有在数据准备就绪时,系统发出信号,进程才会处理数据拷贝到程序缓冲区的操作。
异步I/O
异步I/O模型进一步发展,它允许进程在数据从内核缓冲区拷贝到程序缓冲区的过程中也执行其他任务,通过设立信号回调,当数据准备好时再通知进程,从而完全实现异步操作。
想要了解更多内容?
![](/theme/default/default/images/main/icon-jing.png)
咸鱼运维杂谈
扫码关注公众号
咸鱼运维杂谈的其他文章
加入社区微信群
与行业大咖零距离交流学习
![](https://cdn.easycorp.cn/rongpm/upload/202312/f_39217d624bb2b42ce8f6322ebd7e573a.png)
![](https://cdn.easycorp.cn/rongpm/upload/202312/f_39217d624bb2b42ce8f6322ebd7e573a.png)
软件研发质量管理体系建设
白皮书上线