略過導航

執行緒關聯性

您知道此頁面會自動從 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 日擷取