大家都知道多线程能够提高程序的运行效率,但是它为什么能够提高程序的运行效率呢?它提高效率的原理在哪里呢?

一、针对多核的CPU

这个不用说,每个CPU运行一个线程,当然能够提高效率,就像多个人干活儿比一个人干活儿效率高一样。

二、针对单核CPU

首先,CPU的运行是分时间片的,即:每个时间片运行一段程序,同时多个线程不断抢占CPU资源,谁抢占到了CPU,谁就运行一段时间。

其次,CPU运行的效率是内存的200多倍;是磁盘IO的2000多万倍,程序在操作内存或者磁盘的时候,CPU会有大量等待时间。

有了以上知识点,那么单线程情况下CPU运行如下:

14b1313b47db467248852e4dc2d6cf48.png

单线程CPU运行情况

线程1运行了2段CPU时间片,然后忙其它事情了,比如操作内存了,此时空闲了一大段时间。忙完其它事情后,继续运行时间片。

那么多线程情况下,CPU运行如下:

3a3189777d1cbdb596188102a22aa659.png

多线程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的时间。多线程程序运行效率和线程数应该是呈抛物线的关系,如下:

f2b6e0ac181b367dfe12bf909486afbe.png

至于多少个线程运行的效率最高,需要考虑的因素多了,包括硬件(比如CPU、内存、硬盘等的硬件参数)因素和软件因素(比如内存操作频率,磁盘操作频率,网络IO效率)。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐