高级IO 1

高级IO 1_第1张图片

1.IO = 等 + 数据拷贝

等好了 -> IO事件就绪

(“等”是做了条件检测)

2. IO的五种模型

        1.阻塞IO

高级IO 1_第2张图片

        2.非阻塞IO

如果内核还未将数据准备好 , 系统调用仍然会直接返回 , 并且返回 EWOULDBLOCK 错误码
非阻塞 IO 往往需要程序员循环的方式反复尝试读写文件描述符 , 这个过程称为 轮询 . 这对 CPU 来说是较大的浪费 ,
般只有特定场景下才使用

高级IO 1_第3张图片

        3.信号驱动(容易出问题)

高级IO 1_第4张图片

        4.多路复用/多路转接IO

虽然从流程图上看起来和阻塞 IO 类似 . 实际上最核心在于 IO 多路转接能够同时等待多个文件
描述符的就绪状态 .
高级IO 1_第5张图片

        ---同步IO

        5.异步IO(并不是特别好的方案)

高级IO 1_第6张图片

(助记)

高级IO 1_第7张图片

 3.fcntl

高级IO 1_第8张图片

高级IO 1_第9张图片

将cin设为非阻塞的一些情况 

高级IO 1_第10张图片

 效果(EAGAIN里加个sleep(1) 和打印"date not ready\n")

 高级IO 1_第11张图片

4.多路转接select

高级IO 1_第12张图片

高级IO 1_第13张图片

返回值

高级IO 1_第14张图片

fd_set

(fd_set源码)

高级IO 1_第15张图片

解释readfds

传入的是要读的,会传出其中就绪的:

高级IO 1_第16张图片

高级IO 1_第17张图片

大小是28*8bit

例子

高级IO 1_第18张图片

timeout也是输入输出型参数 

你可能感兴趣的:(个人学习博客,服务器,网络,运维)