閱讀762 返回首頁    go 微軟 go Office


線程親和性(Thread Affinity)

如果你正在開發低延遲的網絡應用,那應該對線程親和性(Thread affinity)有所了解。線程親和性能夠強製使你的應用線程運行在特定的一個或多個cpu上。通過這種方式,可以消除操作係統進行調度過程導致線程遷移所造成的影響。幸運的是,剛好有一個這麼一個java庫 Java-Thread-Affinity ,並且很容易就可以整合到你的netty應用中。

首先,pom.xml中需增加以下依賴:
<dependency>
    <groupId>net.openhft</groupId>
    <artifactId>affinity</artifactId>
    <version>3.0.6</version>
</dependency>

其次,創建一個特定策略的AffinityThreadFactory,並傳入包含延遲敏感(latency-sensitive)線程的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運行其他用戶線程(user-space processes)。同時別忘了修改內核啟動參數isolcpus(如:grub.conf中增加isolcpus=<cpu-list>

轉載自 並發編程網 - ifeve.com

最後更新:2017-05-18 20:31:20

  上一篇:go  《Netty官方指南》把Netty當做一個通用的庫
  下一篇:go  《TOGAF 9.1IT企業架構》2.2企業IT架構的工作結構組成