大家都知道多线程能够提高程序的运行效率,但是它为什么能够提高程序的运行效率呢?它提高效率的原理在哪里呢?
一、针对多核的CPU
这个不用说,每个CPU运行一个线程,当然能够提高效率,就像多个人干活儿比一个人干活儿效率高一样。
二、针对单核CPU
首先,CPU的运行是分时间片的,即:每个时间片运行一段程序,同时多个线程不断抢占CPU资源,谁抢占到了CPU,谁就运行一段时间。
其次,CPU运行的效率是内存的200多倍;是磁盘IO的2000多万倍,程序在操作内存或者磁盘的时候,CPU会有大量等待时间。
有了以上知识点,那么单线程情况下CPU运行如下:
线程1运行了2段CPU时间片,然后忙其它事情了,比如操作内存了,此时空闲了一大段时间。忙完其它事情后,继续运行时间片。
那么多线程情况下,CPU运行如下:
线程1运行了2个时间片。
线程1切换到线程2,CPU运行和等待了3个时间片,然后线程2运行了2个CPU时间片。
线程2切换到线程3,CPU运行和等待了3个时间片,然后线程3运行了2个CPU时间片。
线程3再切换到线程1,CPU运行和等待了5个时间片,然后线程1继续运行2个时间片。
综上所述,多线程能够提高程序运行的效率,根本原因是提高了CPU的有效运行时间,让CPU忙起来,做了更多的事情。
那么是不是线程越多,程序效率越高呢?显然不是,因为线程的切换也需消耗CPU的时间。多线程程序运行效率和线程数应该是呈抛物线的关系,如下:
至于多少个线程运行的效率最高,需要考虑的因素多了,包括硬件(比如CPU、内存、硬盘等的硬件参数)因素和软件因素(比如内存操作频率,磁盘操作频率,网络IO效率)。