一般的高性能网络I/O框架库包含这样几个组件:句柄(Handle)、事件多路分离器(EventDemultiplexer)、事件处理器(EventHandler)、具体事件处理器(ConcreteEventHandler)、Reactor。
1、句柄
I/O框架库需要处理的对象,包括I/O事件、定时器事件、信号事件,通常称为事件源。一个事件源通常会和一个句柄绑定起来,句柄的作用是,当内核检测到某一就绪事件后,内核通过句柄通知应用程序这一事件。在Linux中句柄就是文件描述符,信号对应的句柄就是对应的信号值。
2、事件多路分离器
事件的到来是无序、异步的,我们无法预知程序合适会接收到一个连接请求、或者其他的已监听事件。所以程序需要循环的等待并处理事件,这就是事件循环。在事件循环中实现事件循环,一般是通过I/O多路复用技术实现的。I/O框架库一般将系统支持的各种I/O复用系统调用封装成统一的接口,称为事件多路分离器。事件多路分离器的demultiplexer函数是等待事件的核心方法,其封装了select、poll、epoll_wait等函数。
下面看一下I/O框架组件图:
此外,事件多路分离器还需要实现register_event和remove_event方法,以供调用者往事件多路分离器中注册和删除事件。
3、事件处理器和具体事件处理器
事件处理器一般用来处理事件对应的业务,它通常包含一个或多个handle_event回调函数,这些回调函数在事件循环中被执行。I/O框架