I/O 多路复用 — epoll

内容纲要

⚠️ 基础概念

Linux内核中断

操作系统基础

内核网络数据收发流程

I/O 多路复用

I/O 多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。

注意 ↓
通常在 I/O 多路复用中(如 epoll),socket 需要设置为 no-blocking 模式,不然会出现问题 ↓
🌰你的「读 fd」需要读取 200 Byte 的数据才会返回,但是发送数据方只发送了 199 Byte,于是你的「读 fd」就一直处于阻塞状态,并最终导致 epoll 处于被阻塞状态?

epoll

select

工作流程(开发)
  1. 准备一个数组,用来存放需要监视的 socket fd
  2. 调用 select
    1. 如果数组中的 socket 都没有数据:进入阻塞状态,直到有 socket 接收到数据,进程被唤醒
    2. 如果有数据则跳转 → 3
  3. select 返回
  4. 遍历数组中所有 fd:通过 FD_ISSET 判断哪个 scoket 接收到数据
  5. 后续处理

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注