线程池核心线程数多少最为合适(IO密集型和CPU密集型)?

线程数量是否越多越好呢?

一.CPU密集型

CPU 使用率较高(也就是一些复杂运算,逻辑处理)非常多的情况下,线程数一般只需要CPU核心数的线程就可以了。 这一类型多出现在开发中的一些业务复杂计算和逻辑处理过程中。

二.I/O密集型

CPU 使用率较低,程序中会存在大量 I/O 操作占用时间,导致线程空余时间很多,所以通常就需要开CPU核心数两倍的线程。当线程进行 I/O 操作 CPU 空闲时,启用其他线程继续使用 CPU,以提高 CPU 的使用率。

线程等待时间所占比例越高,需要越多线程,以此提高CPU的利用率;线程 CPU 时间所占比例越高,需要越少的线程,这一类型在开发中主要出现在一些计算业务频繁的逻辑中。

三.总结

  • 一个计算为主的程序(CPU密集型程序),多线程跑的时候,可以充分利用起所有的 CPU 核心,比如说 8 个核心的CPU ,开8 个线程的时候,可以同时跑 8 个线程的运算任务,此时是最大效率。
    但是如果线程远远超出 CPU 核心数量,反而会使得任务效率下降,因为频繁的切换线程也是要消耗时间的。因此对于 CPU 密集型的任务来说,线程数等于 CPU 数是最好的了。
  • 如果是一个磁盘或网络为主的程序(IO密集型程序),一个线程处在 IO 等待的时候,另一个线程还可以在 CPU 里面跑,有时候 CPU 闲着没事干,所有的线程都在等着 IO,这时候他们就是同时的了,而单线程的话此时还是在一个一个等待的。我们都知道 IO 的速度比起 CPU 来是很慢的。此时 线程数等于CPU核心数的两倍是最佳的。
发布了62 篇原创文章 · 获赞 6 · 访问量 4428

猜你喜欢

转载自blog.csdn.net/HU1656/article/details/105076259