Linux I/O models:修订间差异
imported>Soleverlee |
imported>Soleverlee |
||
第25行: | 第25行: | ||
*http://www.linuxidc.com/Linux/2015-07/120337.htm | *http://www.linuxidc.com/Linux/2015-07/120337.htm | ||
*http://blog.csdn.net/lovingprince/article/details/6426009 | *http://blog.csdn.net/lovingprince/article/details/6426009 | ||
*http://blog.csdn.net/jay900323/article/details/18141217 | |||
[[Category:Linux/Unix]] | [[Category:Linux/Unix]] |
2016年8月19日 (五) 01:34的版本
- 阻塞I/O(blocking I/O)
- 非阻塞I/O (nonblocking I/O)
- I/O复用(select 和poll) (I/O multiplexing)
- 信号驱动I/O (signal driven I/O (SIGIO))
- 异步I/O (asynchronous I/O (the POSIX aio_functions))
前四种都是同步,只有最后一种才是异步IO。
blocking IO
阻塞IO模型是最常见的IO模型了,对于所有的“慢速设备”(socket、pipe、fifo、terminal)的IO默认的方式都是阻塞的方式。阻塞就是进程放弃cpu,让给其他进程使用cpu。进程阻塞最显著的表现就是“进程睡眠了”。阻塞的时间通常取决于“数据”是否到来。
nonblocking IO
一个非阻塞模式套接字多次调用recv()函数的过程。前三次调用recv()函数时,内核数据还没有准备好。因此,该函数立即返回WSAEWOULDBLOCK错误代码。第四次调用recv()函数时,数据已经准备好,被复制到应用程序的缓冲区中,recv()函数返回成功指示,应用程序开始处理数据。