java线程池大小为何会大多被设置成CPU核心数+1
来源:互联网 发布:淘宝联盟手机返利 编辑:程序博客网 时间:2024/05/29 06:34
线程池究竟设成多大是要看你给线程池处理什么样的任务,任务类型不同,线程池大小的设置方式也是不同的。
任务一般可分为:CPU密集型、IO密集型、混合型,对于不同类型的任务需要分配不同大小的线程池。
- CPU密集型任务
尽量使用较小的线程池,一般为CPU核心数+1。
因为CPU密集型任务使得CPU使用率很高,若开过多的线程数,只能增加上下文切换的次数,因此会带来额外的开销。 - IO密集型任务
可以使用稍大的线程池,一般为2*CPU核心数。
IO密集型任务CPU使用率并不高,因此可以让CPU在等待IO的时候去处理别的任务,充分利用CPU时间。 - 混合型任务
可以将任务分成IO密集型和CPU密集型任务,然后分别用不同的线程池去处理。
只要分完之后两个任务的执行时间相差不大,那么就会比串行执行来的高效。
因为如果划分之后两个任务执行时间相差甚远,那么先执行完的任务就要等后执行完的任务,最终的时间仍然取决于后执行完的任务,而且还要加上任务拆分与合并的开销,得不偿失 - 对于计算密集型的程序,线程数应当等于核心数,但是再怎么计算密集,总有一些IO吧,所以再加一个线程来把等待IO的CPU时间利用起来
- 对于计算密集型的任务,在拥有N个处理器的系统上,当线程池的大小为N+1时,通常能实现最优的效率。(即使当计算密集型的线程偶尔由于缺失故障或者其他原因而暂停时,这个额外的线程也能确保CPU的时钟周期不会被浪费。)
阅读全文
0 0
- java线程池大小为何会大多被设置成CPU核心数+1
- 线程池大小设置,CPU的核心数、线程数的关系和区别,同步与堵塞完全是两码事
- Java线程为何会堵塞?
- ubuntu下cpu数,核心数,线程数的关系
- ubuntu下cpu数,核心数,线程数的关系
- Linux下cpu数,核心数,线程数的关系
- Linux查看系统cpu个数、核心数、线程数
- Linux查看系统cpu个数、核心数、线程数
- Linux_查看系统cpu个数、核心数、线程数
- CPU的核心数、线程数的关系和区别
- Linux查看系统cpu个数、核心数、线程数
- Linux查看系统cpu个数、核心数、线程数
- CPU的核心数、线程数的关系和区别
- CPU核心数与线程数的理解——java并发编程入门到精通笔记
- 线程池设置大小
- Linux查看系统cpu个数、核心书、线程数
- Linux查看系统cpu个数、核心书、线程数
- Linux查看系统cpu个数、核心书、线程数
- 单片机学习
- MAC上反编译android apk---apktool, dex2jar, jd-jui安装使用(含手动签名)
- 如何为自己赢得表达的机会、时间
- 比特币
- CentOS 7 :Failed to start IPv4 firewall with iptables.
- java线程池大小为何会大多被设置成CPU核心数+1
- (二)java框架篇笔记库(20)
- 遇到了ImportError: libmysqlclient_r.so.16: cannot open shared object file: No such file or directory
- Java面试题全集(上)
- opencv(四)对图像处理
- windows7下基于Anaconda安装TensorFlow
- Gradle的高级技巧
- 2017.12.7
- QT控件大全 二十一 QPush