加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

合理设置线程数

发布时间:2020-12-15 07:40:32 所属栏目:Java 来源:网络整理
导读:1.多线程程序相对于单线程程序的提速关系 ?Amdahl‘s定律 设处理器的数量为N,程序中必须串行(即无法并发化)的部分耗时占程序全部耗时的比率为p,那么将这样一个程序改为多线程程序,我们能够获得的理论上的最大提速S max 为 S max = 1 / (p + (1 - p) / N);

1.多线程程序相对于单线程程序的提速关系

?Amdahl‘s定律

  设处理器的数量为N,程序中必须串行(即无法并发化)的部分耗时占程序全部耗时的比率为p,那么将这样一个程序改为多线程程序,我们能够获得的理论上的最大提速Smax

  Smax = 1 / (p + (1 - p) / N);

  设T(1)为该程序的单线程版运行总耗时,T(N)为该程序的多线程版运行总耗时,那么将该程序改为多线程程序所得到的提速Smax

  Smax?= T(1) / T(N)

  N->∞ Smax = 1 / p

2.线程数设置的原则

  设Ncpu表示一个系统的处理器数目,Ncpu的具体值可以通过如下Java代码获取:

  int nCPU = Runtime.getRuntime().avaliableProcessors();

2.1 对于CPU密集型线程,可以将线程数设置为Ncpu?+ 1;

2.2 对于I/O密集型线程,优先考虑将线程数设置为1,仅在一个线程不够用的情况下将线程数向2 * Ncpu靠近

2.3 对于有处理器使用率阙值的软件的设置

  Nthreads = Ncpu * Ucpu * (1 + WT / ST)

 Nthreads为线程数的合理大小, Ncpu为CPU数目, Ucpu为目标CPU的使用率(0 < Ucpu?<= 1),WT(Wait Time)为程序花费在等待(如等待I/O操作结果)上的时长,ST(Service Time)为程序实际占用处理器执行计算的时长。在实践中,我们可以使用jvisualvm提供的监控数据计算出WT/ST的值。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读