ACE Proactor模式在Windows性能很好,在Unix/Linux下由于各版本对异步IO支持的不同,ACE Proactor实现的性能不一定好(有的是采用Thread模拟异步IO)。
Terabit的POSIX Proactor实现TProactor在Windows、Unix/Linux下采用一致的接口,并在任何操作系统下提供不低于TPReactor的性能。TProactor采用Leader-Follower模式,适合多CPU的架构。
主要类是AIO_Dispather、AIO_Processor和AIO_Provider。
1) 每个TProactor包含一个AIO_Dispatcher,负责实现Leader-Followwer并在Followers间分配任务(completion jobs)。
2) 可包含1-2个AIO_Processor,负责发起和取消异步操作、管理异步操作、处理异步完成事件,其具体操作委托AIO_Provider实现。
3) AIO_Provider是一个抽象类,Provider是一种插件机制。目前提供POSIX_STD_Provider、SELECT_Provider、SUN_Provider和Linux_Native_Provider四种实现。每种实现又有不同的等待异步完成策略(AIO_Wait_Strategy)和中断Leader策略(AIO_Interrupt_Strategy)。各策略细节参见《New Proactor Implementation for POSIX》一文。
一般地,Linux 2.6推荐使用SELECT_Provider及Event_Poll_Strategy。
TProactor在ACE基础上开发。使用TProactor,有两种方式:
1) 将ACE Proactor相关类中的ACE_改为对应的TRB_类;
2) 采用Terabit提供的脚本,修改ACE源码,将TProactor作为ACE Proactor实现类。该方法修改ACE源码后需重新编译ACE库。
对于新开发的程序,方法1较方便。当然,也可以直接使用下述AIO框架。
Terabit在TProactor基础上,提供AIO框架。由以下核心类组成:
1) IOThreadPool,可有多个TProactor的线程池;
2) ChannelAcceptor/ChannelConnector,相当于ACE中的ACE_Asynch_Acceptor和ACE_Asynch_Connector
3) AsyncChannel,相当于ACE_Service_Handler
4) Protocol,在ACE中协议处理在ACE_Service_Handler子类中实现,而Terabit则将其进一步抽象为Protocol类来实现。
为了提高内存管理性能,该框架提供了ChannelManager、AsynchChannelFactory、ProtocolFactory等(模板)类,提供Cached Memory Pool功能。
采用Terabit AIO框架,开发人员只需要实现Protocol类。但是目前Terabit尚未提供UDP实现类。