> For the complete documentation index, see [llms.txt](https://xd96dx.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://xd96dx.gitbook.io/docs/c-c++/wang-luo-bian-cheng/linux-wang-luo/linux-wang-luo-io-mo-xing.md).

# linux 网络io模型

### 1. 阻塞IO（Blocking I/O）

<figure><img src="/files/zsWKqQNTm9A5KHSUGE4Z" alt=""><figcaption><p>阻塞io</p></figcaption></figure>

特点: 进程发起IO请求后，一直阻塞等待内核返回结果

过程:&#x20;

1. 用户线程发起系统调用（如read），进入内核
2. 内核等待数据准备就绪
3. 数据准备就绪后，内核将数据拷贝到用户空间
4. 系统调用返回，用户线程开始处理数据

### 2. 非阻塞IO（Non-blocking I/O）

<figure><img src="/files/3NqN3cKDJgXWoQPNS0Fi" alt=""><figcaption><p>非阻塞io</p></figcaption></figure>

特点: I/O操作不会阻塞进程，如果数据未准备好，系统会立即返回错误，进程可以选择继续执行其他任务或稍后再试

过程:&#x20;

1. 用户线程发起系统调用，设置文件描述符为非阻塞
2. 内核立即返回，不管数据是否准备就绪
3. 用户线程需要不断地发起系统调用，检查数据是否就绪

### 3. IO多路复用（I/O Multiplexing）

<figure><img src="/files/0vLCJEj64mjUYnJEUoOk" alt=""><figcaption><p><strong>I/O Multiplexing Model</strong></p></figcaption></figure>

特点: 通过`select`、`poll`、`epoll`等系统调用，允许一个线程/进程同时监听多个文件描述符，当某个文件描述符准备就绪时，系统会通知应用程序去处理

过程:&#x20;

1. 用户线程将多个文件描述符注册到内核
2. 内核监控这些文件描述符
3. 当某个文件描述符就绪时，内核通知用户线程
4. 用户线程对就绪的文件描述符进行读写操作

示例:  [IO多路复用](/docs/c-c++/wang-luo-bian-cheng/io-duo-lu-fu-yong.md)

### 4. 信号驱动I/O（Signal-driven I/O）

<figure><img src="/files/Xki91Yai5p9U7JCNtBIw" alt=""><figcaption></figcaption></figure>

特点: 进程发起IO请求后，既不阻塞，也不需要不断地检查IO操作是否就绪，内核完全负责IO操作，当I/O操作准备好时，内核通过信号通知进程

过程:&#x20;

1. 用户线程发起系统调用，请求内核在IO操作就绪时发送信号
2. 内核继续执行，当IO操作就绪时，发送信号给用户线程
3. 用户线程收到信号后，再发起系统调用进行实际的IO操作

示例:  [Signal-Driven I/O Model(信号驱动)](/docs/c-c++/wang-luo-bian-cheng/linux-wang-luo/signaldriven-io-model-xin-hao-qu-dong.md)

### 5. 异步IO（Asynchronous I/O）

<figure><img src="/files/pYX9mt6Fw17eATpAyb48" alt=""><figcaption></figcaption></figure>

特点: 进程发起I/O操作后，不会等待I/O完成，而是继续执行其他任务。当I/O操作完成时，内核通过回调机制通知应用程序

过程:&#x20;

1. 用户线程发起IO请求
2. 内核完全负责IO操作，包括数据传输
3. 当IO操作完成后，内核通知用户线程

示例: [Asynchronous I/O Model(异步IO)](/docs/c-c++/wang-luo-bian-cheng/linux-wang-luo/asynchronous-io-model-yi-bu-io.md)
