跳过导航

线程亲和性

您知道此页面是根据 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 日