Java 最佳线程数怎么得来?

2021-01-05 19:17:24 +08:00
 shangzhanyu
根据公式:服务器端最佳线程数量=((线程等待时间+线程 cpu 时间)/线程 cpu 时间) * cpu 数量,算出来的数量不过百,但是实际情况 service 的线程数又设置的 500 甚至更多,又看了 HotSpot 用的 1:1 内核线程,搞懵逼了。。。
6114 次点击
所在节点    Java
50 条回复
shangzhanyu
2021-01-06 15:20:26 +08:00
@xcstream 怎么讲?
xcstream
2021-01-06 15:25:06 +08:00
开个压 cpu 的跑分软件, 线程数大于 cpu 核就可以跑满了
ZiLong
2021-01-06 16:33:43 +08:00
@Goldilocks 最近弄了个 io_uring,netty 作者也在跟进,在一个 incubator 分支,听他讲,测试效果蛮好的
chendy
2021-01-06 16:38:51 +08:00
@YouLMAO 后面还要一堆线程等数据库和其他东西的返回,实际上还是一请求一线程,这个模型效率一般但是胜在好写
php8
2021-01-06 17:12:27 +08:00
@YouLMAO tomcat 8 的 connector 是 nio,但是 parse 完 request 后还得丢给 worker thread pool 去做业务逻辑,这个 pool 默认 200 个线程,干的事多半会阻塞线程
RudyS
2021-01-06 17:28:53 +08:00
1:1 是基本思路吧,然后再是业务类型,要是 CPU 密集,多开也没意义呀。
gaifanking
2021-01-06 18:06:57 +08:00
公式不对吧 不是应该 N=Cpu 个数*Cpu 目标占有率*(1+W/C)吗
W:Wait time
C:Compute time
然后提速极限=1/P P 为并发时必须串行的部分百分比。

基于公式推荐的个数:
IO 密集型 2*CPU
计算型 CPU+1
这个推荐不好使,我一个 Demo IO 密集型任务 我测试 12 核单机起 1 万多个最快
gitdoit
2021-01-07 08:50:54 +08:00
@shaoyijiong 抓到了,上班划水,等下来我办公室
shangzhanyu
2021-01-07 16:31:37 +08:00
@anjxue demo 和实际不能比吧,毕竟有执行时间、gc 等等
shangzhanyu
2021-01-07 16:35:44 +08:00
@RudyS hotspot 是 1:1 内核线程,linux 系统理论上限是好几万,但是实际弄这么多也不起作用好多都是休眠状态

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/741974

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX