Atitit 五种IO模型attilax总结 blocking和non-blocking synchronous IO和asynchronous I
2.1. 3.1 blocking和non-blocking区别2
2.2. 3.2 synchronous IO和asynchronous IO区别2
1.1. .3 进程的阻塞
正在执行的进程,由于期待的某些事件未发生,如请求系统资源失败、等待某种操作的完成、新数据尚未到达或无新工作做等,则由系统自动执行阻塞原语(Block),使自己由运行状态变为阻塞状态。可见,进程的阻塞是进程自身的一种主动行为,也因此只有处于运行态的进程(获得CPU),才可能将其转为阻塞状态。当进程进入阻塞状态,是不占用CPU资源的。
1.2. 网络IO的模型大致有如下几种:
· 同步模型(synchronous IO)
o 阻塞IO(bloking IO)
o 非阻塞IO(non-blocking IO)
o 多路复用IO(multiplexing IO)
o 信号驱动式IO(signal-driven IO)
· 异步IO(asynchronous IO)
注:由于signal driven IO在实际中并不常用,所以我这只提及剩下的四种IO Model。
1.3. IO 模型的简单矩阵。如下图所示:
2. 五种IO模型总结
2.1. 3.1 blocking和non-blocking区别
调用blocking IO会一直block住对应的进程直到操作完成,而non-blocking IO在kernel还准备数据的情况下会立刻返回。
2.2. 3.2 synchronous IO和asynchronous IO区别
在说明synchronous IO和asynchronous IO的区别之前,需要先给出两者的定义。POSIX的定义是这样子的:
A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes;
An asynchronous I/O operation does not cause the requesting process to be blocked;
两者的区别就在于synchronous IO做”IO operation”的时候会将process阻塞。按照这个定义,之前所述的blocking IO,non-blocking IO,IO multiplexing都属于synchronous IO。
2.3. 各个IO Model的比较如图所示:
Linux 五种IO模型 - paincupid的专栏 - 博客频道 - ****.NET.html
作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 )
汉字名:艾提拉(艾龙), EMAIL:1466519819@qq.com
转载请注明来源: http://www.cnblogs.com/attilax/
Atiend