一、什么是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,效率是由低到高的。