Linux之io多路复用系统调用用法总结与对比

 
Category: Linux-Shell

写在前面

之前已经介绍过关于基本文件IO, 目录IO的一些内容, 这些IO模型多为阻塞式IO, 当然也可以实现为非阻塞(通过文件状态标志O_NOBLOCK).

下面介绍三种I/O模型:

  • I/O多路复用: select, poll
  • 信号驱动I/O: 通过信号机制减少系统资源占用
  • $\bigstar$epoll: 基于事件的IO模型

I/O初步

磁盘文件是一个特例, 内核采用缓冲区cache加速磁盘I/O请求, 因此一旦请求的数据传输到内核的缓冲区cache, 对磁盘的write()操作将立即返回, 而不是等数据实际写入磁盘才返回(O_SYNC标志), 与之对应的是, read()调用将数据从内核缓冲区cache移动到用户的缓冲区, 如果请求的数据不在内核缓冲区cache, 那么内核会让进程休眠, 同时执行对磁盘的读操作.