Linux的异步传输模式及ACE的Proactor模式

  Reactor是工作在同步模式下,Proactor工作在异步模式下。高性能服务器一定是工作在异步模式下的。所以,ACE中有Proactor这个类组。ACE的特点是跨平台和屏蔽技术细节,Proactor应该是编写一份代码,同时可以在Linux和Windows及其它操作系统上运行。实际开发中,我们发现,Proactor编写的服务程序在Windows下工作非常正常,在内核为2.6.X的Linux上就工作不正常,比如,客户的Connect操作就不能返回,经过检查,write和read必须成对出现才会工作正常,这也就是说,比如一个服务器注册到管理服务器,管理服务器不定期将控制指令发到子服务器上将不能实现,这是致命的。
  经过研究发现,原来ACE中的Proactor在Unix上是使用Posix标准实现的异步操作,Posix中有一个AIO,Proactor使用AIO实现异步传输。但Linux在2.6以前版本中不支持AIO,而在2.6版本以后,部分支持AIO。就因为这个部分支持,所以,Posix的子类不能正常工作。
  经过调研,ACE的开发者们知道这个情况,但是他们没有采取什么措施。自己想一想,Unix的平台不止一个Linux,而Linux多支持Posix标准,使用这样的解决方法是很理想化的。Linux早晚也会完全支持Posix的。就目前这种情况,ACE的开发者提出一个解决方案,就是TProactor,是另外一个人开发的解决方案。这个方案是将ACE中的Posix系列类重新实现,用线程和select模拟异步操作。这种方案也不错,但ACE没有包含这种解决方案,我个人认为这是ACE的开发者们坚持理想、追求完美。
  经过尝试TProactor安装比较麻烦,后来我又尝试了Posix_AIO,就是将AIO模拟实现的一个解决方案,使用这个解决方案连ACE中的类都不会替换,只需要在ACE的Makefile中libPosix_AIO.a这个库加进去就行了。 
  最后我是解决了这个问题,想必有很多使用ACE的Proactor的同道会遇到这个问题。现在我的系统是ACE+TProactor和Posix-AIO一起解决的。

转自: http://blog.newsfan.net/leelin/archive/2007/01/14/7248.aspx

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值