peakzhang 发表于 2008-7-15 22:05:16

Proactor VS Reactor

通常,Reactor只允许收发在同一线程,底层使用select函数监听IO事件,回调handle_input,handle_output等函数,显然,这种框架存在瓶颈:            1.收发在同一线程,且采用同步方式接收和发送,对收发数据频繁且数据量较大的系统,收发肯定是系统瓶颈;
            2.reatcor底层采用select,对于支持多个连接的系统,select轮询就要花一定时间,一些I/O事件得不到及时响应。
            
            
      我曾经参与的一个项目使用了reactor架构,设计只支持一个连接,所以,select花的时间不多,但发送和接收数据量比较大,性能测试时,性能瓶颈是收发线程,最后,只有启动多个进程来解决问题。
      
      
      reactor框架有上面一些缺陷,自然想到了proactor框架,proactor底层采用异步I/O技术,据说可以显著提高系统性能,所以,本人在hp-unix平台下对reactor和proactor进行了性能对比测试,但遗憾的是,proactor输了。
      
      测试平台:hp-unix ia64
      测试场景:在相同的网络压力下,比较两个框架的响应及时率和占用的系统资源。
      测试步骤:
      1.启动proactor和reactor服务端,分别在不同的端口监听连接
      2.启动客户端,分别向proactor,reactor发送数据,压力相同;
      3.观察服务端的及时响应统计数据;
      4.观察资源使用情况。
      
      
      测试结果:
      1.reactor和proactor的及时响应率基本相同,相差不超过1%;
      2.proactor占用了大约50%的系统资源,相比之下,reactor占用的不到5%;
      
      
      测试总结:
      1.在连接较少的系统,reactor的处理能力比proactor高。

peakzhang 发表于 2008-7-15 22:05:23

simple rule, don't use proactor.
页: [1]
查看完整版本: Proactor VS Reactor