最佳线程数实战
Posted wenniuwuren
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最佳线程数实战相关的知识,希望对你有一定的参考价值。
对于计算密集型任务,在拥有 N 个核的 CPU 的系统上,当线程池大小为 N+1 时,通常能实现最优的利用率,(即当计算密集型任务偶尔由于页缺失故障或者其他原因而暂停时,这个额外的现线程也能够确保CPU的时钟周期不会被浪费)
对于IO密集型任务,Java 并发编程实战中有一个公式:
Ncpu = number of CPUs
Ucpu = target CPU utilization, 0 <= Ucpu <= 1
W
- = ratio of wait time to compute time
C
要使处理器达到期望的利用率,线程池的最优大小为:
Nthreads = Ncpu * Ucpu * (1 + W/C)
比如我的线上是 8C-16G-200G 的容器,Ucpu 一般水位在 60%, wait time 假设 30ms,compute time 2ms,则
线程数 = 8 * 60% * (1 + 30/2) = 76.8,那么线程数设置 77 可能就是最佳值,具体可以根据具体压测值或者线上最佳实践来设置,这里只是个预估公式,不一定准,可以减少我们初期的试错次数。
以上是关于最佳线程数实战的主要内容,如果未能解决你的问题,请参考以下文章