异步通知:一旦设备准备好,就主动通知应用程序,这种情况下应用程序就不需要查询设备状态。
阻塞I/O意味着一直等待设备可访问再访问,非阻塞I/O意味着使用poll()函数来查询是否可访问,而异步通知则意味着设备通知应用程序自身可访问。
AIO:Asynchronous Input/Output异步输入/输出,基本思想是允许进程发起很多的I/O操作,而不用阻塞或等待任何操作的完成,稍后或在接收到I/O操作完成的通知时,进程就可以检索I/O操作的结果。每个操作需要有一个唯一的上下文,这样才能在它们完成时区分到底是哪个传输操作完成了。在AIO中,通过aiocb(AIO IO control block)结构体进行区分。
struct aiocb {
int aio_fildes; /* File descriptor */
off_t aio_offset; /* File offset */
volatile void * aio_buf; /* Location of buffer */
size_t aio_nbytes; /* Length of transfer */
int aio_reqprio; /* Request priority offset */
struct sigevent aio_sigevent; /* Signal number and value */
int aio_lio_opcode; /* Operation to be performed */
};
kiocb描述符用来跟踪正在运行的同步和异步I/O操作的完成状态。