前言
本来我是不打算写这个玩意的,但是在B呼(Zhi呼)上看到有人对python的运行效率和线程运行大肆鄙夷,我觉得还是有必要出来仔细的澄清一下原由,解释一下python的多线程到底是怎么一回事,为什么说他是个“假的多线程”这样做对我们的python的多线程到底有多少影响,会对我们的运行效率有多大影响。做出一个客观全面的分析,以后可以回应那些“Java吹”,“贬python”(虽然我java我也在用,而且用起来也不错对我个人的提升也比较大,但是任何一款计算机语言都不是完美的,不应该存在鄙视链,有种都给爷爬C语言爬汇编去)
先说一下结论:
我们说到python一般指的是Cpython这个是官方推荐的,网上的大部分资源都是Cpython,基于C语言做的解释器。而问题也就出现在这里。只有Cpython的多线程才是“假的多线程”,原因是由于解释器自带了一个锁叫做(GIL global interpreter lock)。但是和其他的例如Java的多线程Cpython这种多线程的区别是,python只能使用单核,也就是是假如你的CPU是多核的,但是python的多线程只能使用一个核。换句话说这种线程能够并发,但是不能并行。要想并行只能通过换解释器(Jpython,py