高效能的通訊庫 ZeroMQ的幾個高效能特徵

2021-06-20 08:04:00 字數 1013 閱讀 9048

這兩天研究了一下zeromq,號稱史上最好的通訊庫,比rabbitmq快很多,基於c語言開發的,實時流處理sorm的task之間的通訊就是用的zeromq。

zeromq在使用模式上支援多種,有req-reply,publish-subscribe,push-pull。

下圖是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切換開銷。

高效能的通訊庫 zeroMQ的幾個高效能特徵

原帖這兩天研究了一下zeromq,號稱史上最好的通訊庫,比rabbitmq快很多,基於c語言開發的,實時流處理sorm的task之間的通訊就是用的zeromq。zeromq在使用模式上支援多種,有req reply,publish subscribe,pipe。下圖是zeromq的架構圖 簡單說明一...

實現高效能穩定的socket tcp通訊經驗分享

其實在.net socket編寫高效能穩定方面的資料真的比較少,乙個實質性的測試資料結果對比就更少了.我們可以從看到ms說net 2.0 sp1後的socket通訊能力非常強勁,可以同時掛起6w個io 可以簡單地認為可以在一秒內send receive可以達到6w或更高 但要找這個資料的測試似乎很難...

高效能的OkHttp

預設情況下,okhttp並沒有將包含cache control頭部檔案的響應進行快取。因此你的客戶端可能會浪費時間與頻寬去重複請求相同的資源,而不是簡單地讀取初次請求時候的快取副本。為了保證基於檔案系統的響應快取,應該配置乙個com.squareup.okhttp.cache例項並且把它傳遞給okh...