关于python多线程

来自讨论群的总结

问:py的多线程是假的,解释器是单线程的,多线程都是时分模拟出来的假象,并不是真的并行运行,性能没有得到并行加速,消耗时间没有因为多线程而缩短

答:python多线程只有GIL是模拟的而已,线程本身是系统线程,只是多个线程会竞争一个解释器锁而已。真实的系统线程在系统层面调度,模拟出来的是软调度。任何不需要用到解释器锁的都可以并行,并不是只有io线程会并行。

问:代码不是需要解释器才能运行么,解释器是单线程的,没抢到锁的线程得不到解释器执行,那不就是单线程的了吗

答:解释器又不是只在一个线程上运行的。解释器可以在多个线程上运行,每个线程竞争一个锁,这个锁和别的锁没区别。而且这个GIL的限制只对调用python的threading库创建的线程有作用,直接调用C的API创建一个线程就不受GIL限制