CPU密集型程序

概念

一个完整请求,I/O操作可以在很短时间内完成, CPU还有很多运算要处理,也就是说 CPU 计算的比例占很大一部分。

单核情况

image.png
由于是单核CPU,所有进程都在等待CPU时间片,所以四个线程完成的时间总和和单线程完成四次的时间是一样的,而且实际上还有线程上下文切换的开销。

多核情况(四核)

image.png
每个线程都有 CPU 来运行,并不会发生等待 CPU 时间片的情况,也没有线程切换的开销。理论情况来看效率提升了4倍。
所以,如果是多核CPU 处理 CPU 密集型程序,我们完全可以最大化的利用 CPU 核心数,应用并发编程来提高效率。

多少个线程数量

理论上线程数量 = CPU核数(逻辑),实际上一般会设置为线程数量 = CPU核数(逻辑) + 1,因为如果恰好有一个线程因为某种原因而暂停了,额外的一个线程可以保证程序在这种情况下不会停止工作。

IO密集型程序

概念

与 CPU 密集型程序相对,一个完整请求,CPU运算操作完成之后还有很多 I/O 操作要做,也就是说 I/O 操作占比很大部分。

单核情况

image.png
IO等待时间是CPU时间的两倍,这时三个线程可以最大化利用CPU

多少个线程数量

单核最佳线程数 = (1 / CPU利用率) = 1 + (IO耗时 / CPU耗时)
多核最佳线程数 = 单核最佳线程数 * 核数

调优工具

  1. SkyWalking
  2. CAT
  3. zipkin