线程亲和性(Thread Affinity)
  TEZNKK3IfmPf 2023年11月15日 18 0
原文链接 译者:裘卡

如果你正在开发低延迟的网络应用,那应该对线程亲和性(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>

更多信息请访问GitHub

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2023年11月15日   23   0   0 多线程同步
  TEZNKK3IfmPf   2023年11月15日   28   0   0 多线程同步
  TEZNKK3IfmPf   2023年11月15日   14   0   0 多线程同步
  TEZNKK3IfmPf   2023年11月15日   13   0   0 多线程同步
TEZNKK3IfmPf