加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

3 分钟快速了解信号驱动式 IO

发布时间:2021-04-03 11:23:55 所属栏目:传媒 来源:互联网
导读:会先使能信号驱动 IO,然后循环执行计数操作。 当有 IO 就绪信号到来时,会去终端读取数据并打印出来,然后继续执行计数操作。 五、扩展知识 I/O 多路复用 、信号驱动 I/O 以及 epoll 机制可用于监视多个文件描述符。 它们并不实际执行 I/O 操作,当某个文件

会先使能信号驱动 IO,然后循环执行计数操作。

当有 IO 就绪信号到来时,会去终端读取数据并打印出来,然后继续执行计数操作。

五、扩展知识

I/O 多路复用 、信号驱动 I/O 以及 epoll 机制可用于监视多个文件描述符。

它们并不实际执行 I/O 操作,当某个文件描述符处于就绪态,仍需采用传统的 I/O 系统调用来完成 I/O 操作。

相比 I/O 多路复用,当监视大量的文件描述符时信号驱动 I/O 有着显著的性能优势,原因是内核能够帮进程记录了正在监视的文件描述符列表。

信号驱动 I/O 的缺点:

  • 信号的处理流程较为复杂;
  • 无法指定需要监控的事件类型。

Linux 特有的 epoll 是一个更好的选择。

六、相关参考

UNIX 网络编程卷1

  • 6.2 I/O模型
  • 25 信号驱动式I/O

Linux-UNIX 系统编程手册

  • 63 其他备选的I/O模型

Linux 高性能服务器编程

  • 8.3 I/O 模型

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 近乎无用。

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读