计算公式
(1)Nthreads = Ncpus * Ucpu * (1 + W/C);
Nthreads: 线程数
Ncpus:CPU核心数
Ucpu: cpu的使用率 0~1
W:等待阻塞时间(wait)
C: 计算时间(Calculate)
W/C: 阻塞时间与计算时间的比率
(2)Nthreads = Ncpu / (1 - 阻塞参数)
阻塞参数: W / (W+C)
实际应用
线程的等待时间所占比例越高,需要越多的线程。
实际任务可分为两种类型
IO密集型
阻塞时间 >> 计算时间
Nthreads = Ncpu * (1 + 1) = 2Ncpu。
常见场景:数据库数据交互,文件上传下载,网络数据传输等。
计算密集型
计算时间 >> 阻塞时间
假设没有等待时间W=0,则W/C=0, Nthreads = Ncpu。
常见场景:复杂算法