CPU密集型程序
概念
一个完整请求,I/O操作可以在很短时间内完成, CPU还有很多运算要处理,也就是说 CPU 计算的比例占很大一部分。
单核情况
由于是单核CPU,所有进程都在等待CPU时间片,所以四个线程完成的时间总和和单线程完成四次的时间是一样的,而且实际上还有线程上下文切换的开销。
多核情况(四核)
每个线程都有 CPU 来运行,并不会发生等待 CPU 时间片的情况,也没有线程切换的开销。理论情况来看效率提升了4倍。
所以,如果是多核CPU 处理 CPU 密集型程序,我们完全可以最大化的利用 CPU 核心数,应用并发编程来提高效率。
多少个线程数量
理论上线程数量 = CPU核数(逻辑),实际上一般会设置为线程数量 = CPU核数(逻辑) + 1,因为如果恰好有一个线程因为某种原因而暂停了,额外的一个线程可以保证程序在这种情况下不会停止工作。
IO密集型程序
概念
与 CPU 密集型程序相对,一个完整请求,CPU运算操作完成之后还有很多 I/O 操作要做,也就是说 I/O 操作占比很大部分。
单核情况
IO等待时间是CPU时间的两倍,这时三个线程可以最大化利用CPU
多少个线程数量
单核最佳线程数 = (1 / CPU利用率) = 1 + (IO耗时 / CPU耗时)
多核最佳线程数 = 单核最佳线程数 * 核数
调优工具
- SkyWalking
- CAT
- zipkin