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:

——异步操作进程

——完成事件队列

——多通道异步事件分发器

优点

——轻便

——低耦合并发线程

——性能和可扩展性

——简单的应用同步

——函数的可复合性

缺点

——程序的复杂度

——内存占用过高

results matching ""

    No results matching ""