当前位置:   article > 正文

线程池中线程数改如何设置_2线程怎么改4线程

2线程怎么改4线程

面试题

  • java中线程池用过吧(听到这里内心窃喜,以为又要老生常谈让我说下主要参数),结果面试官画风一转,说下线程数通常是怎么设置的?有什么规则?(嗯哼,面试还没开始就触碰到了我的知识盲点吗?无数乌鸦飘过)

    硬着头皮回答,经验值一般是cpu核数*2
    
    • 1
  • 面试官灵魂拷问为什么是cpu 数*2呢?

     。。。老实交代,不知道。。
    
    • 1

经验值

  • 如果是CPU密集型应用,则线程池大小设置为N+1
  • 如果是IO密集型应用,则线程池大小设置为2N+1

知识点–敲黑板

CPU密集型 (CPU-bound)

CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/内存),I/O在很短的时间就可以完成,而CPU还有许多运算要处理,CPU Loading很高。
CPU bound的程序一般而言CPU占用率相当高。这可能是因为任务本身不太需要访问I/O设备,也可能是因为程序是多线程实现因此屏蔽掉了等待I/O的时间。

IO密集型(I/O bound)

IO密集型指的是系统的CPU性能相对硬盘、内存要好很多,此时,系统运作,大部分的状况是CPU在等I/O (硬盘/内存) 的读/写操作,此时CPU Loading并不高。
I/O bound的程序一般在达到性能极限时,CPU占用率仍然较低。这可能是因为任务本身需要大量I/O操作,而pipeline做得不是很好,没有充分利用处理器能力

CPU密集型 vs IO密集型

CPU密集型任务特点是要进行大量的计算,这种场景下,任务越多花在任务切换的时间就越多,CPU执行任务的效率就越低。
IO密集型任务,特点是CPU消耗很少,任务大部分时间在等待IO操作完成(比如网络访问第三方系统、查询库等)。对于IO密集型任务,任务越多CPU效率越高,当然都有一个限度。

理论支撑- 利特尔法则
  一个系统请求数=请求的到达率*平均某个单独请求花费的时间
  • 1

通过这个公式我们可以了解到三个具体参数值:

  1. 一个请求所消耗的时间
  2. 该请求的计算时间
  3. CPU数目
合理线程数计算公式
最佳线程数目 =((线程等待时间+线程CPU时间)/线程CPU时间)* CPU数目
  • 1

通过这个公式可以得出一个结论:

 线程等待时间所占比例越高,需要越多线程。线程CPU时间所占比例越高,需要越少线程。
  • 1

这个结论与前文提到的经验值基本吻合。

结论

文中提到了线程数设置经验值以及理论支撑,在实际应用中,还需要结合实际消耗,压测,来对线程数进行微调。

更多精彩内容请关注公众号

更多精彩内容请关注公众号

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/156091
推荐阅读
相关标签
  

闽ICP备14008679号