3 分钟快速了解信号驱动式 IO
会先使能信号驱动 IO,然后循环执行计数操作。 当有 IO 就绪信号到来时,会去终端读取数据并打印出来,然后继续执行计数操作。 五、扩展知识 I/O 多路复用 、信号驱动 I/O 以及 epoll 机制可用于监视多个文件描述符。 它们并不实际执行 I/O 操作,当某个文件描述符处于就绪态,仍需采用传统的 I/O 系统调用来完成 I/O 操作。 相比 I/O 多路复用,当监视大量的文件描述符时信号驱动 I/O 有着显著的性能优势,原因是内核能够帮进程记录了正在监视的文件描述符列表。 信号驱动 I/O 的缺点:
Linux 特有的 epoll 是一个更好的选择。 六、相关参考 UNIX 网络编程卷1
Linux-UNIX 系统编程手册
Linux 高性能服务器编程
Linux 多线程服务端编程_使用muduo C++网络库 I/O 操作就绪时,内核会给进程发送一个信号,然后调用在第 1 步中安装好的信号处理函数。 6> 进程尽可能多地执行 I/O 操作。 循环执行 I/O 系统调用直到失败为止,此时错误码为 EAGAIN 或 EWOULDBLOCK。 原因: 信号驱动 I/O 提供的是边缘触发通知,即只有当 I/O 事件发生时我们才会收到通知, 且当文件描述符收到 I/O 事件通知时,并不知道要处理多少 I/O 数据。 三、内核何时会发送 "IO 就绪" 信号? 对于不同类型的文件描述符,情况不一样。 1> 终端 对于终端,当有新的输入时会会产生信号。 2> 管道和 FIFO 对于读端,下列情况会产生信号:
对于写端,下列情况会产生信号:
3> 套接字 对于 UDP 套接字,下列情况会产生信号:
对于 TCP 套接字,信号驱动式 I/O 近乎无用。 (编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |