dromara / dynamic-tp

🔥🔥🔥轻量级动态线程池,内置监控告警功能,集成三方中间件线程池管理,基于主流配置中心(已支持Nacos、Apollo,Zookeeper、Consul、Etcd,可通过SPI自定义实现)。Lightweight dynamic threadpool, with monitoring and alarming functions, base on popular config centers (already support Nacos、Apollo、Zookeeper、Consul, can be customized through SPI).
https://dynamictp.cn
Apache License 2.0
3.88k stars 780 forks source link

Dynamic-tp接入visual thread #483

Open TheFatRatre opened 1 month ago

TheFatRatre commented 1 month ago

前言

最近研究了下jdk21的虚拟线程,感觉dynamic-tp可以依赖此做一些拓展之类的。dtp很大的一个优点就是将executor进行一个统一的管理,由于虚拟线程也是面向于线程调度的(或者说提高应用程序的吞吐量),故认为dtp将其也进行兼容是一个不错的升级。

作用

虚拟线程的优势在于其并发性高,可以在io密集的场景下作为一种可选的方式来提高吞吐量以进行性能优化。其二,由于虚拟线程是threadpertask的方式执行任务的,其承载的任务是可追踪的,其类中也提供了相关的方法来追踪其堆栈信息,故认为可以以一种更直接的方式来监控多线程任务的完成程度及每个任务的开销等等。

落地实现

由于需要基于jdk21,我想到有两种方式。第一个是在springboot3x的基础上新建一个仓库,满足环境基于jdk21和springboot3x的则引入此依赖。其二是直接在springboot3x上做修改封装,若jdk版本不满足且用户做了虚拟线程的配置则对此配置进行报错

相关生态

在动态调节参数这方面,由于虚拟线程的特性,能调的参数可能只有平台线程的数量这一个参数,但是其默认的平台线程的数量已经是最佳值了。用户只需在配置文件中声明此executor就行了,不配置其他参数则为虚拟线程的默认参数

监控这块可能是重头,因为虚拟线程的任务可追踪,其性能又比较稳定,不需要像线程池一样根据性能进行动态的调参,故监控这块可以把重心放在监控任务的这个维度上,如实现任务超时报警,每个任务完成情况的监控等等,感觉还是有很多可以琢磨的地方的,大家有啥好的想法可以交流交流哈

KamToHung commented 1 month ago

后续会支持,如果有想法可以讨论讨论

yanhom1314 commented 1 month ago

虚拟线程没池化概念,但是任务维度的监控确实是可以做的

TheFatRatre commented 1 month ago

是的,但是其可以通过executor的方式执行,和经典的线程池很接近,感觉核心还是不会特别难做吧