高性能的通信库-zeroMQ的几个高性能特征

这两天研究了一下zeroMQ,号称史上最好的通信库,比rabbitMQ快不少,基于c语言开发的,实时流处理sorm的task之间的通讯就是用的zeroMQ。 算法

zeroMQ在使用模式上支持多种,有req-reply,publish-subscribe,pipe。 网络

 

下图是zeroMQ的架构图 session

简单说明一下, 多线程

从上到下依次是网络、zeroMQ、用户的应用,至关于在应用层和网络层加了一个消息通讯库这么一个层次 架构

应用层经过API使用socket(此socket不一样于传统意义上的socket)和zeroMQ进行交互 并发

zeroMQ有多个工做者线程,每一个工做者线程能够建立多个socket链接对象(由listener监听),也能够做为socket客户端链接远程的对象。 异步

socket套接字对象包括engine、session对象;engine负责链接的管理(和网络进行交互,好比从网络中读取数据,消息排队,接受新的链接等);session对象主要负责和zeroMQ的socket进行交互,他们之间采用异步事件驱动的无锁队列pipe。 socket

 

zeroMQ在设计上主要采用了如下几个高性能的特征: 性能

一、无锁的队列模型 优化

      对于跨线程间的交互(用户端和session)之间的数据交换通道pipe,采用无锁的队列算法CAS;在pipe的两端注册有异步事件,在读或者写消息到pipe的时,会自动触发读写事件。

二、批量处理的算法

     对于传统的消息处理,每一个消息在发送和接收的时候,都须要系统的调用,这样对于大量的消息,系统的开销比较大,zeroMQ对于批量的消息,进行了适应性的优化,能够批量的接收和发送消息。

三、多核下的线程绑定,无须CPU切换

    区别于传统的多线程并发模式,信号量或者临界区, zeroMQ充分利用多核的优点,每一个核绑定运行一个工做者线程,避免多线程之间的CPU切换开销。

相关文章
相关标签/搜索