Reactor与Proactor的两篇paper
《Reactor: An Object Behavioral Pattern for Concurrent Event Demultiplexing and Dispatching》
这篇Paper给出了Reactor模式的定义: Reactor是一个同步的多路复用分发器,它主要由两个部分构成:一个同步的解多路复用器(Demultiplexer),一个事件分发器(Dispatcher)。事件处理程序在Dispatcher进行注册,提供一致的对外接口,这个接口就是OO的常见多态方式。
系统工作时,
(1) 先把感兴趣的事件源(IO通道句柄)在Demultiplexer注册;
(2) 然后启动Demultiplexer。由于Demultiplexer是同步的,所以进入休眠状态;
(3) 直到某几个事件源(IO通道)发生了我们感兴趣的事件;
(4) Demultiplexer把事件送入Dispatcher;
(5) Dispatcher调用对应的事件处理程序(Event Handler)
典型的同步Demultiplexer:select函数
《Comparing Two High-Performance I/O Design Patterns》
这篇paper对比了Reactor和Proactor这两个模式 Reactor模式,见前文。
Proactor模式。该模式也是两个部分:一个异步的解多路复用器(Demultiplexer),一个事件分发器。
但是在该事件分发器中注册的Event Handler,会以后台方式被调用,主控制程序(main loop)不会感知到它的调用,直到调用完成了,它才发通知给main loop。也就是完全异步的IO。 Proactor一旦被启动,立即返回,主控制程序继续干别的事情,直到事件处理完成,它才得到通知。这是一个典型的AIO,参见《Unix Network Programming》中对IO multiplexing的描述。 Proactor的一个例子:windows的IO完成端口。