线程池大小如何设置
Posted 本站大佬
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程池大小如何设置相关的知识,希望对你有一定的参考价值。
CPU密集型任务(N+1):这种任务消耗的主要是CPU资源,可以将线程数设置为N(CPU核心数)+1,比CPU核心数多出来一个线程是为了防止线程偶尔发生的缺页中断或者其他原因导致的任务暂停而带来的影响。一旦任务暂停,CPU就会处于空闲状态,在这种情况下,多出来一个线程可以充分利用CPU的空闲时间。
I/O密集型任务(2N):这种任务应用起来,系统会用大部分时间处理I/O交互,而线程在处理I/O的时间段内不会占用CPU,这时可以将CPU给其他线程使用。因此在I/O密集型任务中,可以多配置一些线程。
但这种用法在实际应用当中是及其不正确的。
线程池的大小不可能只与服务器核心数有关。
————
假设应用是CPU与I/O混合型任务,那么该如何设置线程池大小呢?
可以将任务分成IO密集型和CPU密集型任务,然后分别用不同的线程池来处理。只要分完之后两个任务的执行时间相差不大,那么就会比串行执行起来高效。如果划分之后两个任务执行时间相差甚远,那么先执行完的任务就要等后执行的任务,最终任务的时间仍然取决于后执行完的任务,而且还要加生任务拆分与合并的开销。得不偿失。
依赖其他资源任务。
如果某个任务依赖数据库的连接返回结果,这时候等待时间越长,则CPU空闲的时间越长,那么线程数量应设置得越大,才能更好的使用CPU。
最佳线程数目 = ((线程等待时间+线程CPU时间)/线程CPU时间)* CPU数目
线程等待时间所占比例越高,需要越多线程。线程CPU时间所占比例越高,则需要越少线程。
以上是关于线程池大小如何设置的主要内容,如果未能解决你的问题,请参考以下文章