处理多个描述符、处理多个套接字的情况,不能阻塞在一个IO下,内核一旦发现任一个IO条件就绪就通知进程。
IO模型
阻塞式IO模型
默认系统调用都是阻塞的,只有当数据到达并复制到应用程序的缓冲区中或发生错误才会返回。
非阻塞式IO模型
当所请求的IO操作不能立即完成,进程需要被睡眠时,不睡眠而返回一个错误EWOULDBLOCK。(所以进程得轮询pooling来操作)
IO复用
阻塞在多个上。
信号驱动
开启套接字的信号驱动功能,并通过signal安装一个信号处理函数,当数据准备好后,内核会为该进程产生一个SIGIO信号。
异步IO
告知内核启动某个操作,并在完成后再通知我们,相比信号驱动,内核是在完成后通知我们,而信号驱动是通知我们什么时候可以启动一个IO操作。