I/O模型

2 篇文章 0 订阅
本文详细介绍了IO模型的五种类型:阻塞IO、非阻塞IO、IO复用、SIGIO信号和异步IO。阻塞IO在等待数据时会被挂起;非阻塞IO即使无数据也会立即返回;IO复用(如epoll)允许程序监听多个事件;SIGIO信号通过信号触发读写就绪;异步IO则由内核完成读写操作并通知应用程序。理解这些模型对于优化系统性能至关重要。
摘要由CSDN通过智能技术生成

io模型对比

io模型读写操作和阻塞阶段
阻塞io程序阻塞于读写函数
非阻塞io读写操作总是立即返回,用户程序执行读写操作,没有数据等待就绪阶段,阻塞在读写阶段
io复用程序阻塞于io复用系统调用,但同时可以监听多个io事件,对io本身读写操作是非阻塞的
SIGIO信号信号触发读写就绪事件,用户程序执行读写操作。程序没有阻塞阶段。
异步io内核执行读写操作并处罚读写完成时间。程序没有阻塞阶段。
阻塞io

阻塞io的调用可能会因为无法立即完成而被操作系统挂起,直到等待的事情发生为止。如网络编程的connect,发起连接时,客户端发送同步报文,直到等到接收到服务器确认报文。若服务器确认报文没有立即到达客户端,connect调用将会被挂起。

非阻塞io

非阻塞io的调用总是立即返回,不管事件是否已经发生。如果事件没有立即发生,会返回-1,通过error区别出错情况。对于accept,recv而言,EAGAIN,EWOULDBLOCK,属于正常情况
在事件已经发生的情况下操作非阻塞io,才能提高程序的效率。因此非阻塞io和其他io通知机制一起使用,io复用和SIGIO信号。

io复用

应用程序向内核注册多个事件,内核监管多个事件,并在事件就绪时通过io复用函数通知应用程序。io复用本身是阻塞的epoll_wait阻塞等待到有事件就绪来临。

SIGIO信号

为一个文件描述符指定宿主进程,被认定的宿主进程会捕获到SIGIO信号,当目标文件描述符事件准备就绪时,就会触发信号处理函数

异步io

阻塞,非阻塞,io复用,信号驱动都是同步io模型,这三种io模型都是在io事件发生后,由应用程序完成的。而POSIX规范的异步io模型不同,对于异步io,用户可以直接对io执行读写操作,这些操作告诉内核用户读写缓冲区 的位置,以及io操作完成后的通知方式。异步io总是立即返回,正真的读写操作已经交给内核处理。
同步io向应用程序通知的是io就绪事件,异步io向应用程序通知的是io完成事件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值