執行緒關聯性
您知道此頁面會自動從 Github Wiki 頁面 產生嗎?您可以自己在此處 改進此頁面!
如果您使用 Netty 開發低延遲網路應用程式,您可能已經了解稱作執行緒關聯性的東西。執行緒關聯性可以強制您的應用程式執行緒在特定 CPU 核心或 CPU 組上執行。透過執行此操作,您可以在作業系統排程處理程序期間取消執行緒移轉。值得慶幸的是,有一個名為 Java-Thread-Affinity 的 Java 函式庫,可以輕鬆與您的 Netty 應用程式整合。
首先,將下列依賴項新增至您的 Maven pom.xml
檔案
<dependency>
<groupId>net.openhft</groupId>
<artifactId>affinity</artifactId>
<version>3.0.6</version>
</dependency>
其次,使用特定策略建立一個 AffinityThreadFactory 並將其傳遞至包含延遲敏感型執行緒的 EventLoopGroup。這是範例
final int acceptorThreads = 1;
final int workerThreads = 10;
EventLoopGroup acceptorGroup = new NioEventLoopGroup(acceptorThreads);
ThreadFactory threadFactory = new AffinityThreadFactory("atf_wrk", AffinityStrategies.DIFFERENT_CORE);
EventLoopGroup workerGroup = new NioEventLoopGroup(workerThreads, threadFactory);
ServerBootstrap serverBootstrap = new ServerBootstrap().group(acceptorGroup, workerGroup);
請注意,為了達到最低延遲,您應該考慮將目標 CPU 從作業系統排程器中隔離出來。隔離目標 CPU 可以防止作業系統排程器在這些 CPU 上排程任何其他使用者空間程序。這可以使用 isolcpus
核心開機參數來執行(即在 grub.conf
中新增 isolcpus=<cpu 清單>
)。
若要了解更多資訊,請造訪此專案的 Github。
上次在 2024 年 7 月 19 日擷取