为啥使用了线程池速度没有变化呢python

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥使用了线程池速度没有变化呢python相关的知识,希望对你有一定的参考价值。

参考技术A 单线程

在我的4核 CPU 计算机中,单线程所花的时间是 6.5 秒。

多线程

创建两个子线程 t1、t2,每个线程各执行 5 千万次减操作,等两个线程都执行完后,主线程终止程序运行。结果,两个线程以合作的方式执行是 6.8 秒,反而变慢了。按理来说,两个线程同时并行地运行在两个 CPU 之上,时间应该减半才对,现在不减反增。

是什因导致多线么原程不快反慢的呢?

原因就在于 GIL ,在 Cpython 解释器中,有一把全局解释锁(Global Interpreter Lock),在解释器解释执行 Python 代码时,先要得到这把锁,意味着,任何时候只可能有一个线程在执行代码,其它线程要想获得 CPU 执行代码指令,就必须先获得这把锁,如果锁被其它线程占用了,那么该线程就只能等待,直到占有该锁的线程释放锁才有执行代码指令的可能。

因此,这也就是为什么两个线程一起执行反而更加慢的原因,因为同一时刻,只有一个线程在运行,其它线程只能等待,即使是多核CPU,也没办法让多个线程并行执行代码,只能是交替执行,因为多线程涉及到上线文切换、锁机制处理(获取锁,释放锁等),所以,多线程执行不快反慢。

以上是关于为啥使用了线程池速度没有变化呢python的主要内容,如果未能解决你的问题,请参考以下文章

为啥线程没有在线程池中重用?

java线程只能被启动(Thread.start())一次,那么为啥线程池中的线程能被重复利用呢?

叮咚 | 线程池为什么设计成这样?

为啥在python里推荐使用多进程而不是多线程

为啥线程池定时的任务在熄屏下不能执行

从上厕所想到的线程池设计原理