没有合适的资源?快使用搜索试试~ 我知道了~
线程池线程数设置.doc
需积分: 1 0 下载量 100 浏览量
2024-03-20
17:45:40
上传
评论 1
收藏 44KB DOC 举报
温馨提示
试读
3页
线程池线程数设置.doc
资源推荐
资源详情
资源评论
CPU 密集型 和 IO 密集型 的区别,如何确定线程池大小?
https://cloud.tencent.com/developer/article/1806245
发布于 2021-03-25 10:58:52 阅读 6K0
CPU 密集型
CPU 密集型也叫计算密集型,指的是系统的硬盘、内存性能相对 CPU 要好很多,此时,系统运作大部分的状况是 CPU
Loading 100%,CPU 要读/写 I/O(硬盘/内存),I/O 在很短的时间就可以完成,而 CPU 还有许多运算要处理,CPU Loading
很高。
比如说要计算 1+2+3+…+ 1 亿、计算圆周率后几十位、数据分析。 都是属于 CPU 密集型程序。
此类程序运行的过程中,CPU 占用率一般都很高。
假如在单核 CPU 情况下,线程池有 6 个线程,但是由于是单核 CPU,所以同一时间只能运行一个线程,考虑到线程之
间还有上下文切换的时间消耗,还不如单个线程执行高效。
所以!!!单核 CPU 处理 CPU 密集型程序,就不要使用多线程了。
假如是 6 个核心的 CPU,理论上运行速度可以提升 6 倍。每个线程都有 CPU 来运行,并不会发生等待 CPU 时间片
的情况,也没有线程切换的开销。
所以!!!多核 CPU 处理 CPU 密集型程序才合适,而且中间可能没有线程的上下文切换(一个核心处理一个线程)。
简单的说,就是需要 CPU 疯狂的计算。
IO 密集型
IO 密集型指的是系统的 CPU 性能相对硬盘、内存要好很多,此时,系统运作,大部分的状况是 CPU 在等 I/O (硬盘/内
存) 的读/写操作,但 CPU 的使用率不高。
所以用脚本语言像 python 去做 I/O 密集型操作,效率就很快。
简单的说,就是需要大量的输入输出,不如读文件、写文件、传输文件、网络请求。
区别和使用:
IO 密集型:大量网络,文件操作 CPU 密集型:大量计算,cpu 占用越接近 100%, 耗费多个核或多台机器
业务要具体分析,假如 CPU 现在是 10%,数据量增大一点点,CPU 狂飙,那也可能 CPU 密集型。
如何确定线程池大小?
线程数不是越多越好。
由于 CPU 的核心数有限,线程之间切换也需要开销,频繁的切换上下文会使性能降低,适得其反。
简单的总结就是:
Ncpu 表示 核心数。
如果是 CPU 密集型任务,就需要尽量压榨 CPU,参考值可以设为 Ncpu+1
如果是 IO 密集型任务,参考值可以设置为 2 * Ncpu
上面两个公式为什么是 Ncpu+1 呢,而不是 Ncpu+2 呢,为什么不是 3 * Ncpu 呢?
在《Java 并发编程实践》中,是这样来计算线程池的线程数目的:
资源评论
JAVA领域优质创作者
- 粉丝: 1758
- 资源: 223
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功