NOTE

4.3 select、poll、epoll

1. select - select的几大缺点: - 每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大 - 同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大 - select支持的文件描述符数量太小了,默认是1024 - 2

Operating System / Linux创建于 更新于 historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. select

  • select的几大缺点:
    • 每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大
    • 同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大
    • select支持的文件描述符数量太小了,默认是1024
  • IO多路复用-select

2. poll

  • 解决了select第三个问题
  • IO多路复用-poll

3. epoll

  • select的三个缺点都解决了
  • IO多路复用-epoll

3.1. LT

  • 水平触发:读缓冲区只要不为空,就会一直触发读事件;写缓冲区只要不满,就会一直触发写事件。
  • 一般用这个,因为ET一次触发没有处理好那么就没有第二次机会了

3.2. ET

  • 边缘触发:读缓冲区的状态,从空转为非空的时候触发一次;写缓冲区的状态,从满转为非满的时候触发一次
    • 比如用户发送一个大文件,把写缓存区塞满了,之后缓存区可以写了,就会发生一次从满到不满的切换。

4. 参考