ACE-Task结构介绍(二)——消息块ACE_Message_Block结构的分析
消息块ACE_Message_Block结构的分析
- 包含一个指向带引用计数功能的ACE_Data_Block对象,该对象指向正在的数据缓冲区,这样可以在ACE_Message_Block对象之间灵活、高效地共享数据
- 一个或多个ACE_Message_Blocks对象可以连接起来组成一条链
- ACE_Message_Blocks对象可以连接起来组成一个双向的链表,进而形成消息队列
1 class ACE_Export ACE_Message_Block 2 { 3 public: 4 friend class ACE_Data_Block; 5 /******************************************************* 6 * 函数声明 7 *******************************************************/ 8 /// Pointer to beginning of next read. 9 /// 数据读指针,实际上是一个相对起始地址的偏移量 10 size_t rd_ptr_; 11 12 /// Pointer to beginning of next write. 13 /// 数据写指针,实际上是一个相对起始地址的偏移量 14 size_t wr_ptr_; 15 16 /// Priority of message. 17 /// 表示消息的优先级,用于优先级消息队列 18 unsigned long priority_; 19 20 #if defined (ACE_HAS_TIMED_MESSAGE_BLOCKS) 21 /// Execution time associated with the message. 22 /// 消息块的时间属性,用于实时消息队列 23 ACE_Time_Value execution_time_; 24 25 /// Absolute deadline time for message. 26 ACE_Time_Value deadline_time_; 27 #endif /* ACE_HAS_TIMED_MESSAGE_BLOCKS */ 28 29 // = Links to other ACE_Message_Block *s. 30 /// Pointer to next message block in the chain. 31 /// 消息链指针,多个消息块可以连在一起,构成一个消息块链 32 ACE_Message_Block *cont_; 33 34 /// Pointer to next message in the list. 35 /// 表示后一个消息指针 36 ACE_Message_Block *next_; 37 38 /// Pointer to previous message in the list. 39 /// 前一个消息指针 40 ACE_Message_Block *prev_; 41 42 /// Misc flags (e.g., DONT_DELETE and USER_FLAGS). 43 /// 是ACE_Data_Block删除标志,表示该实例下的data_block_是否要删除 44 ACE_Message_Block::Message_Flags flags_; 45 46 /// Pointer to the reference counted data structure that contains the 47 /// actual memory buffer. 48 /// 数据块指针 49 ACE_Data_Block *data_block_; 50 51 /// The allocator used to destroy ourselves when release is called 52 /// and create new message blocks on duplicate. 53 /// 消息块内存分配器 54 ACE_Allocator *message_block_allocator_; 55 56 private: 57 // = Disallow these operations for now (use <clone> instead). 58 ACE_Message_Block &operator= (const ACE_Message_Block &); 59 ACE_Message_Block (const ACE_Message_Block &); 60 };
- 每次写入数据时,写指针会偏移实际写入数据的长度,每次读出数据时,读指针会偏移实际读出数据的长度。它们的差就是当前消息块中含有的数据量。
- ACE_Message_Block和ACE_Data_Block结构关系如图所示
联系方式:emhhbmdfbGlhbmcxOTkxQDEyNi5jb20=
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了