高性能的通訊庫-zeroMQ的幾個高性能特征

jopen 10年前發布 | 35K 次閱讀 消息系統 ZeroMQ

zeroMQ,號稱史上最好的通訊庫,比rabbitMQ快很多,基于c語言開發的,實時流處理sorm的task之間的通信就是用的zeroMQ。

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

 

下圖是zeroMQ的架構圖

高性能的通訊庫-zeroMQ的幾個高性能特征

簡單說明一下,

從上到下依次是網絡、zeroMQ、用戶的應用,相當于在應用層和網絡層加了一個消息通信庫這么一個層次

應用層通過API使用socket(此socket不同于傳統意義上的socket)和zeroMQ進行交互

zeroMQ有多個工作者線程,每個工作者線程可以創建多個socket連接對象(由listener監聽),也可以作為socket客戶端連接遠程的對象。

socket套接字對象包括engine、session對象;engine負責連接的管理(和網絡進行交互,比如從網絡中讀取數據,消息排隊,接受新的 連接等);session對象主要負責和zeroMQ的socket進行交互,他們之間采用異步事件驅動的無鎖隊列pipe。

 

zeroMQ在設計上主要采用了以下幾個高性能的特征:

1、無鎖的隊列模型

      對于跨線程間的交互(用戶端和session)之間的數據交換通道pipe,采用無鎖的隊列算法CAS;在pipe的兩端注冊有異步事件,在讀或者寫消息到pipe的時,會自動觸發讀寫事件。

2、批量處理的算法

     對于傳統的消息處理,每個消息在發送和接收的時候,都需要系統的調用,這樣對于大量的消息,系統的開銷比較大,zeroMQ對于批量的消息,進行了適應性的優化,可以批量的接收和發送消息。

3、多核下的線程綁定,無須CPU切換

    區別于傳統的多線程并發模式,信號量或者臨界區, zeroMQ充分利用多核的優勢,每個核綁定運行一個工作者線程,避免多線程之間的CPU切換開銷。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!