一、什么是I/O?
I/O是Input/Output(输入/输出),可分为I/O设备和I/O接口两个部分。
二、什么是I/O操作?
在Linux中,一切皆文件,而文件是什么呢?文件就是一串二进制流而已,不管socket,还是FIFO、管道、终端,一切都是文件,一切都是流。在信息交换的过程中,我们对这些流进行数据的收发操作,简称为I/O操作(input and output),简言之就是磁盘读写,从数据流中读取数据,系统会调用read(读取数据);写入数据,系统调用write(写入数据)。不过 ,计算机里有这么多的流,我怎么知道要操作哪个流呢?对,就是文件描述符,即通常所说的fd,一个fd就是一个整数,所以,对这个整数的操作,就是对这个文件(流)的操作。我们创建一个socket,通过系统调用会,返回一个文件描述符,那么剩下对socket的操作就会转化为对这个描述符的操作。
三、同步异步,阻塞与非阻塞之间的区别与联系
实际上同步与异步是针对应用程序与内核的交互而言的。同步过程中进程触发IO操作并等待(也就是我们说的阻塞)或者轮询的去查看IO操作(也就是我们说的非阻塞)是否完成。 异步过程中进程触发IO操作以后,直接返回,做自己的事情,IO交给内核来处理,完成后内核通知进程IO完成。
同步和异步对应用程序而言关注的是cpu与进程中间的协作关系;阻塞与非阻塞更关注的是单个进程的执行状态。
同步有阻塞和非阻塞之分,异步没有&#