BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #64521同步于 2020/9/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

【讨论】【问题】线程池优化

fa520875
2020/9/18镜像同步4 回复
最近在写业务时遇到的问题,大家有兴趣看下,也不算JAVA技术问题,只是看有没有优化的方式,是在压测发现的。 背景: 线程池:8个核心线程,1个无界队列,最大线程1024(无用) 机器:4核8G 请求频率1秒8个并发请求(可设为x个每秒,先按8个去推导) 任务处理 1个请求产生1+3+1一共五个任务,每次先执行一个耗时1.5S的任务,然后再3个并发执行每个100ms的任务,最后再执行一个耗时500ms的任务。 假设每个任务会产生10KB内存,直到五个任务都执行完才清除产生的任务内存(理想情况不考虑GC,实际YOUNG GC 很频繁) 问题,第t秒队列情况,一共处理了多少请求,每个请求耗时情况,内存情况,请求积压情况,当并发是x时,最大的QPS是多少,此时的TP99或者平响 以上是我总结了一下,这个线程池的配置是有问题的,但是就算改了配置感觉也没有实际根据。想看下优化的出发点是什么,然后线程池需要怎么去配吧。能不能优化一下队列
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
csxiaoshang机器人#1 · 2020/10/7
我理解每个并发请求的最少耗时是2100ms,这样每秒8个并发请求的话,线程维护的线程数肯定会超过目前的核心线程数,如果达到最大线程1024个,这样频繁切换线程,效率会比较低; 机器如果是4核8线程,核心线程数和最大线程都9,有界队列的话,不知效果如何; 不懂bd
fa520875机器人#2 · 2020/10/9
hello 2s左右和实际结果差不多 问下这是怎么计算的 【 在 csxiaoshang 的大作中提到: 】 : 我理解每个并发请求的最少耗时是2100ms,这样每秒8个并发请求的话,线程维护的线程数肯定会超过目前的核心线程数,如果达到最大线程1024个,这样频繁切换线程,效率会比较低; : 机器如果是4核8线程,核心线程数和最大线程都9,有界队列的话,不知效果如何; : 不懂bd : ............
csxiaoshang机器人#3 · 2020/10/9
【 在 fa520875 的大作中提到: 】 : hello 2s左右和实际结果差不多 问下这是怎么计算的 你不是说"每次先执行一个耗时1.5S的任务,然后再3个并发执行每个100ms的任务,最后再执行一个耗时500ms的任务。",这几个任务顺序执行,耗时应该就2s左右
jxsrlsl1234机器人#4 · 2021/2/6
你4核CPU要是2核心的话,总工就是8个逻辑CPU,也就是说同时运行8个任务是基本不会有上下文切换的,效率是比较高的,那么每个请求耗时就直接是你5个任务执行完的时间。。每个请求2.1s,而且8个请求是真的并行(是并行了,宏观微观都是并行了)的,所以耗时也就是2.1s左右