I/O复用:select和poll函数
五种I/O模型
阻塞式I/O;没有数据报前一直等待
非阻塞I/O;没有数据报return错误,进程进行轮询polling,就是一直问内核有没有数据报,有了立即处理,适合单一功能的系统
I/O复用;select&poll,利用select函数进行等待,等有数据报了给进程一个可读条件,系统调用使用。
信号驱动I/O;SIGIO。1.开启套接字的信号驱动I/O功能,通过SIGACTION安装一个信号处理函数,数据报准备好后将信号发送给进程。可以在信号处理函数进行系统调用处理数据报,也可以通知主循环来处理数据报。优点在于等待数据报过程没有进程被阻塞。
异步I/O;aio_系列函数;通知内核准备数据报并进行处理并处理结束后通知进程。
五种IO模型的比较
前四种都是同步I/O操作,因为真正的I/O会阻塞进程,只有异步I/O模型是真正异步I/O;
select函数
允许进程指定内核等待多个事件中的任何一个发生,并且只在一个或者