并发编程 线程数选择

本文将介绍并发编程中的线程数选择。

一、线程数选择

1. CPU 密集型和 I/O 密集型

  • CPU 密集型:I/O 操作时间远小于 CPU 计算时间
  • I/O 密集型:I/O 操作时间远大于 CPU 计算时间

2. CPU 密集型的线程数选择

对于 CPU 密集型,多线程的目的是充分利用每个核,因此理论上应该设置为 线程数 = CPU 核心数

在实际应用中,一般设置为 线程数 = CPU 核心数 + 1,当某个线程因内存页失效或其它原因导致堵塞时,额外的线程可以顶替其位置,保证每个核心的利用。

3. I/O 密集型的线程数选择

最佳线程数 = ((CPU 耗时 + I/O 耗时) / CPU 耗时) * CPU 核心数

参考

  • Java 并发编程实战