扫码阅读
手机扫码阅读
女朋友:不跟我解释清楚 Linux I/O 今晚你就睡沙发吧!
135 2024-07-20
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
文章来源:
咸鱼运维杂谈
扫码关注公众号
前言
本文解释了计算机操作系统中的输入输出(I/O)在 Linux 中的应用,并以文件 I/O 为例介绍了 Linux 的 I/O 模型。程序打开文件时,数据需从硬盘读取到内核缓冲区,再拷贝到程序缓冲区。所有 I/O 模型都需经历这两个阶段。
Linux I/O 模型
阻塞 I/O (BIO)
在阻塞 I/O 中,进程在数据传输的两个阶段均阻塞,直到操作完成。
非阻塞 I/O
非阻塞 I/O 模型中,进程在数据准备阶段不阻塞,而是不断轮询内核,但在数据拷贝阶段阻塞。
I/O 复用
允许进程同时操作多个数据流,使用 select、poll、epoll 等系统调用,进程在数据复制阶段阻塞。
信号驱动 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 复用。
想要了解更多内容?
文章来源:
咸鱼运维杂谈
扫码关注公众号
咸鱼运维杂谈的其他文章
加入社区微信群
与行业大咖零距离交流学习
软件研发质量管理体系建设
白皮书上线