Proactor设计:无需多线程的并行
Asio库同时提供了同步和异步支持。异步操作是基于Proactor模式,我们会大致将它和同步阻塞模型以及Reactor模型做比较,总结它们的优缺点。
Proactor和Asio
我们来看看Asio是如何实现Proactor的,无需使用各平台专有的底层操作。
Proactor设计模式(取自POSA2)
——Asynchronous Operation 异步操作
——Asynchronous Operation Processor 异步操作进程
——Completion Event Queue 完成事件队列
——Completion Handler 完成事件句柄(回调)
——Asynchronous Event Demultiplexer 多通道异步事件分发器
——Proactor
——Initiator 初始化器
使用Reactor来实现Proactor
在很多平台上,Asio通过Reactor的一种变形来实现Proactor,比如select,epoll和kqueue。这种实现通过以下手段贴近Proactor模式:
——异步操作进程
——完成事件队列
——多通道异步事件分发器
使用Windows的叠层IO模型
在Windows NT,2000 和XP系统中,Asio吸纳了叠层IO的设计理念来完成Proactor模型设计。这种实现通过以下手段来模拟Proactor:
——异步操作进程
——完成事件队列
——多通道异步事件分发器
优点
——轻便
——低耦合并发线程
——性能和可扩展性
——简单的应用同步
——函数的可复合性
缺点
——程序的复杂度
——内存占用过高