
zeromq源码分析
子曰帅
源码之前 了无秘密
展开
-
ZMQ源码分析(三)--对象管理和消息机制
对象管理zmq的高效很大一部分原因是因为消息的传递采用无锁的操作,在分析zmq的消息机制之前先来看一下zmq的对象管理机制。在zmq中所有参与消息机制的对象都继承自object_t对象,该对象只有两个变量,一个ctx和一个tid,tid记录了mailbox在ctx中mailbox数组的索引,send_command方法可以通过tid找到对象对应的mailbox以便发送消息。另外object原创 2016-01-23 23:20:53 · 2849 阅读 · 0 评论 -
ZMQ源码分析(一)-- 基础数据结构的实现
ZMQ原创 2016-01-23 22:05:22 · 4595 阅读 · 0 评论 -
ZMQ源码分析(九)--其他socket_base模型
zmq除了上篇介绍的四种模型外还提供了很多其他有用的模型,下图说明了zmq提供的所有模型以及他们之间的使用关系: 下面是zmq的一些相关文章: http://rfc.zeromq.org/spec:24/ZMTP-PLAIN defines the ZMTP-PLAIN security mechanism. http://rfc.zeromq.org/spec:25/ZMTP-CURVE d原创 2016-02-19 19:08:54 · 1141 阅读 · 0 评论 -
ZMQ源码分析(八)--ROUTER-DEALER & REQ-REP
router & dealer 这对模型是zmq最重要的模型,由这对模型也衍生出一些其他模型,比如接下来要说到的req-rep模型。再分析router-dealer之前先看一下zmq的两个队列 : fq和 lb。前者是一个用于接收消息的fair queueing队列,后者是一个用于发送消息的load balance队列。两者都使用了一个array_t来作为自己的队列数据结构,array_t的实现比原创 2016-02-19 19:03:13 · 4881 阅读 · 0 评论 -
ZMQ源码分析(二)-- 网络&线程模型
网络&线程模型 zmq封装了select,poll,epoll,queue,kqueue等各个平台上基础的网络模型,但是在windows上没有封装IOCP模型,而是使用select,这对zmq在windows上会造成一些性能影响,毕竟select模型的性能相对较低。虽然这些模型的原理和操作都不相同,但是zmq封装了这些差异,抽象出统一的实现接口,下面我们以linux下的epoll模型为例进行分析,原创 2016-01-23 22:00:44 · 3171 阅读 · 0 评论 -
ZMQ源码分析(四)--MSG
MSGmsg类是zmq中消息的定义类,tcp数据传送,进程间数据传送,进程内数据传送都是以msg为基本单位的。由于msg经常需要在对象之间传送,所以如何能尽量避免拷贝是msg需要解决的问题。 class msg_t{public: // Message flags. enum { more = 1, // Followed by mo原创 2016-01-24 01:08:05 · 1800 阅读 · 0 评论 -
ZMQ源码分析(七) --进程内通讯
之前两节分析了zmq的tcp通讯流程,除了tcp之外,zmq还支持许多其他的通讯模式,比如inproc,ipc,pgm,epgm,tipc等。这一节接着分析inpro,即进程内通讯。和tcp通讯相比,进程内通讯要简单许多,因为不涉及到远程连接的认证以及数据的编码和解码,只是简单的在两个socket_base_t之间连接一个pipe,通过pipe在线程间传递数据即可。inproc通讯也两个套接字分别调原创 2016-01-29 19:29:21 · 3573 阅读 · 1 评论 -
ZMQ源码分析(六)--编码器和解码器
zmq的编码器和解码器负责和stream_engine合作收发网络数据,zmtp3.0使用v2_decoder和v2_encoder进行收发数据,本文也只对该版本进行分析。解码器原创 2016-01-28 17:17:59 · 1800 阅读 · 0 评论 -
ZMQ源码分析(五) --TCP通讯
zmq支持tcp,inpro,ipc,pgm,epgm,tipc等通讯方式。只要在address中指定地址格式即可透明支持对应的通讯方式。这里我们以最常用的tcp为例分析zmq数据在网络间传输的流程。原创 2016-01-28 11:21:38 · 6823 阅读 · 0 评论