IO多路复用(IO Multiplexing)

Nov 2, 2020·
Bang
Bang
· 1 min read

I/O多路复用(I/O Multiplexing)是一种并发处理的机制,它允许单个进程或线程处理多个I/O操作,而不需要创建额外的线程或进程。这种机制通过一种事件驱动的方式来实现,其中一个进程或线程可以监视多个输入或输出流的状态,并在有数据到达时进行相应的处理。

在I/O多路复用中,常见的实现方式包括使用select、poll、epoll等系统调用。这些调用允许程序指定一组文件描述符(sockets、文件、设备等),并在这些文件描述符上等待事件的发生。当其中任何一个文件描述符上发生可读、可写或异常等事件时,程序就能够得知并进行相应的处理,而不需要阻塞在一个文件描述符上等待。

相对于传统的多线程或多进程模型,I/O多路复用的优势在于它可以更高效地处理大量的并发连接,减少线程或进程的创建和管理开销。这使得它在构建高性能的网络服务器等应用中得到广泛应用。

IO多路复用(IO Multiplexing)有两种模式,Reactor和Preactor模式,其中Reactor用于同步IO,Preactor用于异步IO

graph TD subgraph select A[初始化文件描述符集合] -->|加入文件描述符| B[设置超时时间] B -->|等待事件| C[检查发生事件的文件描述符] C -->|处理事件| D[返回结果] end subgraph poll E[初始化pollfd结构数组] -->|设置文件描述符和事件| F[调用poll系统调用] F -->|等待事件| G[检查发生事件的文件描述符] G -->|处理事件| H[返回结果] end subgraph epoll I[创建epoll实例] -->|添加文件描述符| J[调用epoll_ctl] J -->|等待事件| K[调用epoll_wait] K -->|检查发生事件的文件描述符| L[处理事件] L --> M[返回结果] end

Reactor模式

Reactor模式称之为响应器模式,通常用于NIO的非阻塞IO的网络通信框架中。

什么是Reactor模式?

Reactor模式是处理并发I/O常见的一种模式,用于同步I/O,其中心思想是将所有要处理的I/O事件注册到一个中心I/O多路复用器上,同时主线程阻塞在多路复用器上,一旦有I/O事件到来或是准备就绪,多路复用器将返回并将相应I/O事件分发到对应的处理器中。

Reactor是一种事件驱动机制,和普通函数调用不同的是应用程序不是主动的调用某个API来完成处理,恰恰相反的是Reactor逆置了事件处理流程,应用程序需提供相应的接口并注册到Reactor上,如果有相应的事件发生,Reactor将主动调用应用程序注册的接口(回调函数)。

Reactor模式称为反应器模式或应答者模式,是基于事件驱动的设计模式,拥有一个或多个并发输入源,有一个服务处理器和多个请求处理器,服务处理器会同步的将输入的请求事件以多路复用的方式分发给相应的请求处理器。

Reactor设计模式是一种为处理并发服务请求,并将请求提交到一个或多个服务处理程序的事件设计模式。当客户端请求抵达后,服务处理程序使用多路分配策略,由一个非阻塞的线程来接收所有请求,然后将请求派发到相关的工作线程并进行处理的过程。

在事件驱动的应用中,将一个或多个客户端的请求分离和调度给应用程序,同步有序地接收并处理多个服务请求。对于高并发系统经常会使用到Reactor模式,用来替代常用的多线程处理方式以节省系统资源并提高系统的吞吐量。

Bang
Authors
Professor of Artificial Intelligence
My research interests include distributed robotics, mobile computing and programmable matter.