IO模型

IO模型,第1张

I/O模型 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完成事件。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5502358.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存