我发现很多人在面试的时候,都会被问道关于什么select、poll、epoll的问题,但是多路复用IO这一块的知识,大家普遍学得似懂非懂,很多同学甚至不知道这些是多路复用IO里面的知识,而网上写的内容由太过于晦涩难懂,在这里,我用最简单的语言带大家了解一下IO多路复用到底是什么。
一、什么是IO操作
我们都知道在Unix环境下,一切皆文件,而文件就是一串二进制流。在信息 交换的过程中,我们都是对这些流进行数据的收发操作,简称为I/O操作(input and output),往流中读出数据,系统调用read,写入数据,系统调用write。
二、文件描述符
可是在实际操作过程中,计算机里面有那么多流,我们怎么知道该造作的是哪个流呢?于是我们就要依赖文件描述符;
文件描述符就是一个整数,这就有点像我们刚出生的时候,会有一个身份证编号,通过这个编号,我们能够确定一个具体的人;那么同理,我们在Unix系统下,如果打开一个文件,会得到一个文件描述符,以后我们通过这个文件描述符就可以找到这个需要操作的文件,进行操作;
三、什么叫做阻塞
假如你今天在家里做饭,你决定我一定要先烧鱼,可是去买鱼的人就是没有回来,于是你后面的事情都不干了,卡在那里等鱼,这就是阻塞;
你在Unix系统中,如果一定要等一条信息,那条信息不来,你就什么都不干,停在那里了,这就是阻塞;