登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Code@Pig Home

喜欢背着一袋Code傻笑的Pig .. 忧美.欢笑.记忆.忘却 .之. 角落

 
 
 

日志

 
 

[ZeroMQ] 深入分析(1) -- 几个基础数据结构  

2010-12-09 16:13:38|  分类: net_ZeroMQ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
==== array.hpp ====
class array_item_t, 作为 array_t 的子类,要继承 array_item_t,保存了一个 array_index,翻遍快速删除元素。
class array_t, 内部 vector 实现。

===== atomic_ptr.hpp =====
封装了对 T* 的 xchg, cas 等原子操作。下面的 yqueue/ypipe 就是依赖 xchg, cas 来实现 lock-free 的。

===== yqueue.hpp =====
  1. 允许 A线程push()/B线程pop()
  2. 每次申请N个元素,减少malloc/free
  3. lock-free

[ZeroMQ] 深入分析(1) -- 几个基础数据结构 - kasicass - Code@Pig Home

begin_chuck + begin_pos, 第一个元素 front()
 back_chunk +  back_pos, 最后一个元素 back()
  end_chunk +   end_pos, 最后一个元素 + 1

spare_chunk, 如果 pop() 之后, begin_chunk 移到下一个 chunk_t, 则将使用完毕的 chunk_t 交给 spare_chunk
             下次 push() 的时候说不定可以用上,减少 malloc/free

==== ypipe.hpp ====
依旧是个 queue,在 yqueue, atomic_ptr 基础上作了封装。
上层 reader_t/writer_t 用其在进程间传递 zmq_msg_t。
下面简单分解下 read/check_read/write/flush 的逻辑。

[ZeroMQ] 深入分析(1) -- 几个基础数据结构 - kasicass - Code@Pig Home
 
 
  评论这张
 
阅读(3941)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018