线程亲和性
您知道此页面是根据 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
内核启动参数来完成(即,将 isolcpus=<cpu-list>
添加到 grub.conf
)。
有关更多信息,请访问该项目的 Github。
上次检索时间:2024 年 7 月 19 日