Disruptor-rs:Rust中Disruptor庫

banq發表於2024-07-14


這是一個用 Rust 編寫的低延遲、執行緒間通訊庫。

特徵

  • 單一生產者單一消費者 (SPSC)。
  • 多生產者單消費者 (MPSC)。
  • 具有消費者相互依賴關係的多生產者多消費者 (MPMC)。
  • 忙碌旋轉等待策略。
  • 批次釋出事件。
  • 事件的批次消費。
  • 可以為事件處理器執行緒設定執行緒親和性。
  • 設定每個事件處理器執行緒的執行緒名稱。

設計選擇

庫中的所有內容都與低延遲有關,這嚴重影響了庫中的所有選擇。例如,您無法分配事件並將其移動到環形緩衝區中。相反,事件在啟動時分配,以確保它們位於記憶體中,從而提高快取一致性。但是,您仍然可以在堆上分配結構並將所有權轉移到環形緩衝區上事件中的欄位。只要您意識到這會增加延遲,因為結構由一個執行緒分配並由另一個執行緒刪除。因此,分配器中會發生同步。

動態排程也沒有用處——一切都是單態的。

Disruptor 和 Crossbeam 
Disruptor 和 Crossbeam 庫之間顯然存在差異。但這並不是因為 Crossbeam 庫不是一款出色的軟體。它是一款出色的軟體。
Disruptor 以 CPU 和記憶體資源換取更低的延遲和更高的吞吐量,這就是它能夠實現這些結果的原因。
如果您可以釋出批次事件,Disruptor 也會表現出色,如基準測試中所示,突發事件為 10 和 100 個。

隨著突發大小的增加,這兩個庫都得到了很大的改進,但 Disruptor 的效能對於突發之間的暫停更具彈性,這是設計目標之一。

還有多個其他 Rust 專案模仿 LMAX Disruptor 庫:

  1. Turbine
  2. Disrustor

本庫支援的一個關鍵特性是來自不同執行緒的多個生產者,而上述兩個庫均不支援(在撰寫本文時)。

Tokio 預設專注於高吞吐量,因為他們主要使用yield_now退避策略。它應該適用於大多數應用程式。
對於延遲敏感的應用程式,它往往具有不同的目的,主要是以 CPU 和 RAM 的使用率為代價來獲得更高的低延遲(首先)和更高的吞吐量。disruptor 更注重低延遲。而且成本非常高:核心利用率 100%。如果你可以透過提高速度來賺錢,比如在電子交易中,那麼這是一個不錯的選擇。

這些庫更注重熱路徑/快取一致性,並允許單 CPU 處理(無快取一致性問題/鎖爭用)。這就是效能的來源,在原始 LMAX 論文中稱為“機械同情”。

最初,計算機價格昂貴,許多使用者希望共享一個系統,因此很多作業系統都考慮到了這一點,LMAX 顛覆了這一點,計算機價格低廉,你希望計算機儘可能快地完成一件事,而這不適合圍繞完全相反的想法設計的現代作業系統。

  • 這也是為什麼裸機在實踐中比虛擬機器快很多倍的原因,因為你不會與一堆汙染快取的其他程式共享別人的計算機。

相關文章