eachann chan
eachann chan
# 前言 最近研究了下jdk21的虚拟线程,感觉dynamic-tp可以依赖此做一些拓展之类的。dtp很大的一个优点就是将executor进行一个统一的管理,由于虚拟线程也是面向于线程调度的(或者说提高应用程序的吞吐量),故认为dtp将其也进行兼容是一个不错的升级。 # 作用 虚拟线程的优势在于其并发性高,可以在io密集的场景下作为一种可选的方式来提高吞吐量以进行性能优化。其二,由于虚拟线程是threadpertask的方式执行任务的,其承载的任务是可追踪的,其类中也提供了相关的方法来追踪其堆栈信息,故认为可以以一种更直接的方式来监控多线程任务的完成程度及每个任务的开销等等。  # 落地实现 由于需要基于jdk21,我想到有两种方式。第一个是在springboot3x的基础上新建一个仓库,满足环境基于jdk21和springboot3x的则引入此依赖。其二是直接在springboot3x上做修改封装,若jdk版本不满足且用户做了虚拟线程的配置则对此配置进行报错 # 相关生态 在动态调节参数这方面,由于虚拟线程的特性,能调的参数可能只有平台线程的数量这一个参数,但是其默认的平台线程的数量已经是最佳值了。用户只需在配置文件中声明此executor就行了,不配置其他参数则为虚拟线程的默认参数  监控这块可能是重头,因为虚拟线程的任务可追踪,其性能又比较稳定,不需要像线程池一样根据性能进行动态的调参,故监控这块可以把重心放在监控任务的这个维度上,如实现任务超时报警,每个任务完成情况的监控等等,感觉还是有很多可以琢磨的地方的,大家有啥好的想法可以交流交流哈
[#513] Virtual thread pin event metric and alarm
**首先感谢您使用 DynamicTp,如果对项目有好的想法建议,请按照下述模板提议讨论,请使用 Markdown 语法**。 ### 方案描述 1. 监控维度主要监控pin的最大时间,总时间,当前时间点被pin住的数量和虚拟线程提交失败的数量(这个是否需要加入tpxx体系里,因为似乎jfr里是单独监控的);  jfr以此方式进行记录  2. 告警可以围绕当前被pin住的任务数量及pin的最大时间的阈值来进行告警; 3. 配置方面则配置告警策略的阈值这些 ### 应用场景 JDK21 ### 难度风险 ### 外部依赖