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

widebright的个人空间

// 编程和生活

 
 
 

日志

 
 

ZeroMQ 基于无锁消息队列(lock-free的pipe)的无锁多线程模型 (actor model) 比较有意思的  

2012-05-21 16:38:46|  分类: 程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

ZeroMQ  基于无锁消息队列(lock-free的pipe)的无锁多线程模型 (型actor model) 比较有意思的 - widebright - widebright的个人空间





ZeroMQ  基于无锁消息队列(lock-free的pipe)的无锁多线程模型 (型actor model) 比较有意思的 - widebright - widebright的个人空间




ZeroMQ  基于无锁消息队列(lock-free的pipe)的无锁多线程模型 (型actor model) 比较有意思的 - widebright - widebright的个人空间


ZeroMQ  基于无锁消息队列(lock-free的pipe)的无锁多线程模型 (型actor model) 比较有意思的 - widebright - widebright的个人空间


 原文地址: 
ZeroMq的架构文档
http://www.aosabook.org/en/zeromq.html
强烈建议读一下这个吧

在线源码:
https://github.com/zeromq/libzmq/tree/master/src


1.
i_engine.hpp  -> stream_engine.hpp
有多种继承自i_engine的类
调用socket api的代码就是在这里面。

2.
socket_base.hpp  ->  xsub_socket_t 
session_base.hpp  -> xsub_session_t   (xsub.hpp   pair.hpp  push.hpp  pull.hpp ...)
有多种继承自 socket_base 和session_base的 类。
不同socket模式,主要是根据 pipe的对应关系区分,比如一对多,多对一的pipe对的维护和管理等。
发送和接受时的群发的实现的就在这些相关的类里面实现。必须管理多个pipe对等。
什么负载均衡啊也是在这一层里面做的。具体可以看上面实现类里面的对 lb.hpp dist.hpp  trie.hpp等类的实现,看看是怎么管理多个pipe对的。

3.
yqueue.hpp ->     ypipe.hpp ->     pipe.hpp 
不同的对象通过 pipe 来相连的,pipe的两端注册有pipe event异步通知事件,read 或者 write东西到pipe的时候,自动触发 异步读写事件。 pipe是一个lock-free的 队列,类似 单生产者单消费者的无锁队列,但支持批量消息的入队和出队操作。所有跨线程间的交互都是通过往无锁队列里面写入消息来进行的,得益于这个无锁pipe的使用,整个系统完全的无锁设计, 符合“actor model.” 模型的原理。  关键就是msg_t 结构在pipe里面的传输和传输过程所触发的pipe event。   不同对象,比如socket_t和 后端的 i_engine就通过这个pipe关联起来。


4.
其他的比如message的批量发送, message的内存管理等也比较有意思。根据他们的测试,下面这三个是比较重要的影响性能的因素
Number of memory allocations    message的引用计数,和copy还是new的选择。
Number of system calls           批量发送message可以减少系统调用的次数。
Concurrency model            上面所说的无锁模型actor model.“。
  评论这张
 
阅读(1652)| 评论(0)
推荐 转载

历史上的今天

评论

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

页脚

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