找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 5000|回复: 1

Proactor VS Reactor

[复制链接]
发表于 2008-7-15 22:05:16 | 显示全部楼层 |阅读模式
通常,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高。
 楼主| 发表于 2008-7-15 22:05:23 | 显示全部楼层
simple rule, don't use proactor.
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-22 17:29 , Processed in 0.016737 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表