Boost.Asio库为同步操作和异步操作提供并行支持。异步操作支持基于Proactor设计模式。与同步操作或者Reactor方法相比较,这种方法的优点和缺点概述如下:
Proactor and Boost.Asio
让我们看看Proactor设计模式是如何在Boost.Asio库中实现的,不用参考平台相关细节。
Proactor design pattern (adapted from [POSA2])
— Asynchronous Operation
定义一个异步执行的操作,例如在socket上的异步读写操作。
— Asynchronous Operation Processor
执行异步操作,并且在操作完成时将事件排队到一个完成事件队列。从更高层次看,像reactive_socket_service这样的内部服务就是异步操作处理器。
— Completion Event Queue
缓存完成事件,直到他们被异步事件信号分离器出队。
— Completion Handler
处理异步操作的结果。他是个函数对象,通常由boost::bind创建。
— Asynchronous Event Demultiplexer
在完成事件队列上阻塞等待事件发生,并且返回一个完成事件给它的调用者。
— Proactor
调用异步事件信号分离器来出队事件,并且递送给这个事件关联的completion handle