信号驱动I/O

信号驱动I/O教程

应用进程使用 sigaction 系统调用,内核立即返回,应用进程可以继续执行,也就是说等待数据阶段应用进程是非阻塞的。内核在数据到达时向应用进程发送 SIGIO 信号,应用进程收到之后在信号处理程序中调用 recvfrom 将数据从内核复制到应用进程中。信号驱动 I/O 的 CPU 利用率很高。

信号驱动I/O描述

信号驱动 I/O 示意图如下:

06 sigio io.png

信号驱动 I/O 它会事先和内核约定,告诉内核,如果数据准备好了就通知我,调用我某个信号处理函数,然后内核会立刻响应应用程序。这个时候,应用程序可以做其他的事情,等内核数据准备好了,会将约定好的一个信息通知应用程序,应用程序这个时候就会调用 recvfrom 来同步将内核中的数据拷贝到用户区中。

信号驱动I/O优缺点

优点

I/O 的 CPU 利用率很高。

缺点

实现和开发难度比较大。

信号驱动I/O总结

信号驱动 I/O,应用进程会和内核约定,告诉内核数据如果准备好了就调用我的某个方法通知我,然后就可以去做其他的事情了,等内核数据准备好了,会告诉应用程序。然后应用程序会调用 recvfrom 同步将内核数据拷贝到应用数据。它不是完全意义上的异步,只是部分异步。