轮询技术
下文将介绍Linux中的四种轮询技术,分别是:
- read()
- select()
- poll()
- epoll()
read()轮询技术对应于同步非阻塞I/O模型,每次轮询只能获知一个I/O操作对应的状态,轮询操作由用户负责。
select()、poll()、epoll()轮询技术对应于I/O多路复用(I/O Multiplexing),每次轮询可检测多个I/O操作的状态,轮询(poll)操作由操作系统负责(而用户线程调用对应的轮询函数时会被阻塞)。
注意:
- 以下这些轮询技术都分别对应一种逻辑上的轮询方法(Function)。而每一种轮询方法,内核都会以系统调用(本质是一个或一系列的C语言函数)的形式提供给用户线程进行调用;
- 轮询技术仅仅描述了当用户已经发起I/O操作后,从“用户线程获取这些I/O操作是否已经完成”的过程;
- 这些轮询技术对应的轮询方法都会阻塞用户线程。换句话说,若所有监听的文件描述符对应的I/O操作在很长时间内都没有完成,在这段时间内,这些轮询方法都不会返回控制流给用户线程。