关于io:什么是IO阻塞

36次阅读

共计 956 个字符,预计需要花费 3 分钟才能阅读完成。

一、什么是 IO?
咱们都晓得 unix 世界里、所有皆文件、而文件是什么呢?文件就是一串二进制流而已、不论 socket、还是 FIFO、管道、终端、对咱们来说、一切都是文件、一切都是流、在信息替换的过程中、咱们都是对这些流进行数据的收发操作、简称为 I / O 操作(input and output)、往流中读出数据、零碎调用 read、写入数据、零碎调用 write、不过话说回来了、计算机里有这么多的流、我怎么晓得要操作哪个流呢?做到这个的就是文件描述符、即通常所说的 fd、一个 fd 就是一个整数、所以对这个整数的操作、就是对这个文件(流)的操作、咱们创立一个 socket、通过零碎调用会返回一个文件描述符、那么剩下对 socket 的操作就会转化为对这个描述符的操作、不能不说这又是一种分层和形象的思维。

二、IO 交互
通常用户过程中的一个残缺 IO 分为两个阶:

三、IO 模式
1. 阻塞 IO(blocking I/O)
A 拿着一支鱼竿在河边钓鱼,并且始终在鱼竿前等,在等的时候不做其余的事件,非常分心。只有鱼上钩的时,才完结掉等的动作,把鱼钓上来。
在内核将数据筹备好之前,零碎调用会始终期待所有的套接字,默认的是阻塞形式。

2. 非阻塞 IO(noblocking I/O)
B 也在河边钓鱼,然而 B 不想将本人的所有工夫都破费在钓鱼上,在等鱼上钩这个时间段中,B 也在做其余的事件(一会看看书,一会读读报纸,一会又去看其他人的钓鱼等),但 B 在做这些事件的时候,每隔一个固定的工夫查看鱼是否上钩。一旦查看到有鱼上钩,就停下手中的事件,把鱼钓上来。

3. 信号驱动 IO(signal blocking I/O)
C 也在河边钓鱼,但与 A、B 不同的是,C 比拟聪慧,他给鱼竿上挂一个铃铛,当有鱼上钩的时候,这个铃铛就会被碰响,C 就会将鱼钓上来。

4.IO 多路复用(I/O multiplexing)
D 同样也在河边钓鱼,然而 D 生存程度比拟好,D 拿了很多的鱼竿,一次性有很多鱼竿在等,D 一直的查看每个鱼竿是否有鱼上钩。减少了效率,缩小了期待的工夫。

5. 异步 IO(asynchronous I/O)
E 也想钓鱼,但 E 有事件,于是他雇来了 F,让 F 帮他期待鱼上钩,一旦有鱼上钩,F 就打电话给 E,E 就会将鱼钓上去。

阻塞水平:阻塞 IO> 非阻塞 IO> 多路转接 IO> 信号驱动 IO> 异步 IO,效率是由低到高的。

正文完
 0