Java最佳线程数

来源:互联网 发布:约瑟夫环c语言循环链式 编辑:程序博客网 时间:2024/06/05 21:51
对于计算密集型任务,在拥有Ncpu个处理器的系统上,当线程池大小为N+1时,通常能实现最优的利用率,(即当计算密集型任务偶尔由于页缺失故障或者其他原因而暂停时,这个额外的现线程也能够确保CPU的时钟周期不会被浪费。) 

对于包含IO操作或者其他阻塞操作的任务,由于线程并不会一直执行,因此线程池的规模应该更大.要正确的设置线程池的大小,你必须估算出任务的等待时间和计算时间的比值。这种估算不需要很精确,并且可以通过一些分析活监控工具老获得。 

还可以通过另外一种方法来调节线程池的大小,在某个基准负载下,分别设置不同大小的线程池来运行应用程序,并观察CPU的利用水平。 

Ncpu = number of CPUs 

Ucpu = target CPU utilization, 0 <= Ucpu <= 1 


-  =  ratio of wait time to compute time 


要使处理器达到期望的利用率,线程池的最优大小为: 

Nthreads = Ncpu * Ucpu * (1 + W/C) 

参考<<java concurrency in practise>> P171


0 0