慎用Reactor Notify机制

        在Reactor的模式,有一种辅助的通知机制Notify机制,简单说就是通过通知发起者调用 notify函数,notify的消息被保存在一个管道中,handle_event的处理中会检查这个管道中是 否有通知数据,如果有就根据通知的消息,会根据默认的通知消息的类型去调用hanle_input等函数。

        ACE Reactor的默认Notify方式采用的是ACE_Pipe ,ACE_Pipe是一个跨平台的管道实现。标准情况来讲,采用的实现,但是在最大的两个平台Windows和Linux上,ACE的实现是采用的Socket实现。很多管道特性所特有的东西,在这两个平台上是无法使用ACE_Pipe实现的。比如,管道的特性可以保证在暂时没有接受者的情况下使用,而Socket是不可能有这个特性的。你必须保证先有接受者,后有发送者的时序。

        可以通过定义ACE_HAS_REACTOR_NOTIFICATION_QUEUE的宏编译ACE,这样ACE将不使用ACE_Pipe作为Notify消息的管道,而使用一个自己的内存队列保存Notify消息,这个队列是动态扩展的。而且由于是内存操作,性能方面没有太大问题。

大体位置在重复编译定义后面,#include /**/ "ace/pre.h"前面。保证这个宏起到作用。 
#ifndef ACE_CONFIG_LINUX_H 
#define ACE_CONFIG_LINUX_H 
 
//使用内存队列作为Notify Queue 
#define ACE_HAS_REACTOR_NOTIFICATION_QUEUE 
 
#include /**/ "ace/pre.h" 


          That being said, the standard C++ containers are recommended for application development when you are using ACE.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值