线程亲和性(Thread Affinity)
2023-03-14 22:32:24 时间
如果你正在开发低延迟的网络应用,那应该对线程亲和性(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>
)
相关文章
- LibreOffice 7.5 发布:漂亮的新应用图标和酷炫功能
- elementary OS 7 发布
- Windows 应用兼容层 Wine 8.1 发布:默认启用“Windows 10”前缀
- 微软正测试新功能:当 Windows 11 有新的小组件可用时会提醒通知
- 解析分布式存储选型和应用九个典型问题
- ClickHouse在自助行为分析场景的实践应用
- Chrome DevTools 远程调试安卓网页的原理
- Uni-app + Vue3 页面如何跳转及传参?
- 微软证实系统还原点会损坏 Windows 11 22H2 版本应用程序
- 巧用 Transition 实现短视频 APP 点赞动画
- 初学者试试,HarmonyOS应用开发者基础认证
- 媒体实测微软 Windows 开发工具包 2023:存在不兼容 HDR 显示器、某些应用无法运行等问题
- 快速了解Navigator API SetAppBadge
- 微软 Windows 11 Dev 预览版 Build 25276 发布,应用兼容问题对话框 UI 改进
- 基于Next.js、Prisma、Postgres和Fastfy构建全栈APP
- 开始菜单搜索框变圆角,微软 Windows 11 Beta 预览版 22621.1095 和 22623.1095 发布
- 2022-2023 十大应用开发趋势
- 观远数据发布业内首部《移动BI白皮书》,深入业务数字化场景重新定义移动BI
- Windows 10 学院:不借助第三方工具如何卸载 Windows 10 预装应用
- 正处高质量发展期,我国大数据产业突破1.3万亿元