五种IO模型
阻塞IO、非阻塞IO、信号驱动IO、IO复用、异步IO。
阻塞IO
调用线程等待内核IO操作执行完成,才进行后续操作。
非阻塞IO
调用线程得到内核IO返回的状态值,如果可执行IO操作就执行,如果不能就做其他事情。
信号驱动IO
应用进程告诉内核,如果数据准备好,就发送一个信号,对SIGIO信号进行捕捉,并调用相应的信号处理函数。
IO复用
典型的就有select、poll和epoll。就是应用程序向内核注册事件,内核负责对这些事件进行监听,如果事件发生了,则内核通过返回值通知应用程序进行相应的操作。
异步IO
当应用程序调用aio_read时,内核一方面去取数据报内容返回,另一方面将程序控制权还给应用进程,应用进程继续处理其他事情,是一种非阻塞的状态。
当内核中有数据报就绪时,由内核将数据报拷贝到应用程序中,返回aio_read中定义好的函数处理程序。