【Linux】Linux系统5种IO模型

 

Linux下的五种IO模型

  1.阻塞IO(blocking IO)

  2.非阻塞IO (nonblocking IO)

  3.IO复用(select 和poll) (IO multiplexing)

  4.信号驱动IO (signal driven IO (SIGIO))

  5.异步IO (asynchronous IO (the POSIX aio_functions))

     前四种都是同步,只有最后一种才是异步IO。

  

 

同步阻塞I/O

  同步阻塞IO中,进程的等待时间可能包括两个部分,一个是等待数据就绪,比如等待数据可以读和可以写;另一个是等待数据的复制,当数据准备好后,读写操作的耗时。

  同步非阻塞IO的调用的区别在于,不会去等待数据的就绪,如果数据不可读或者不可写,相关系统调用会立即告诉进程(立即返回)。 比如使用非阻塞recv()接受网络数据后,函数就及时返回,告诉进程没有数据可读了。

其好处是如果结合反复轮询来尝试数据是否就绪,那么在一个进程里可以同时处理多个IO操作。问题在于需要进程来轮询查看数据是否就绪,进程处于忙碌等待状态。

非阻塞IO一般只针对网络IO有效,当我们在socket的选项设置中使用O_NONBLOCK时,这个socket的send()或者recv()就会采用非阻塞方式。 对于磁盘IO非阻塞IO并不产生效果。

 

posted @ 2018-05-08 18:45  songguojun  阅读(278)  评论(0编辑  收藏  举报