加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

慎用Reactor Notify机制

发布时间:2020-12-15 04:57:26 所属栏目:百科 来源:网络整理
导读:在Reactor的模式,有一种辅助的通知机制Notify机制,简单说就是通过通知发起者调用 notify函数,notify的消息被保存在一个管道中,handle_event的处理中会检查这个管道中是 否有通知数据,如果有就根据通知的消息,会根据默认的通知消息的类型去调用hanle_in

在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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读