理论上来说:单个进程的多线程可以利用多核.
但是,开发Cpython解释器的程序员,给进入解释器的线程加了锁.
当时都是单核时代,而且cpu价格非常贵.
如果不加全局解释器锁, 开发Cpython解释器的程序员就会在源码内部各种主动加锁,解锁,非常麻烦,各种死锁现象等等.为了省事儿,直接进入解释器时给线程加一个锁.
优缺点:
优点: 保证了Cpython解释器的数据资源的安全.
缺点: 单个进程的多线程不能利用多核.
Jpython没有GIL锁,pypy也没有GIL锁
现在多核时代, 我将Cpython的GIL锁去掉行么?
因为Cpython解释器所有的业务逻辑都是围绕着单个线程实现的,去掉这个GIL锁,几乎不可能.
单个进程的多线程可以并发,但是不能利用多核,不能并行,多个进程可以并发,并行.
一个线程去修改一个数据的时候,由于网络延迟或者其它原因,被另一个线程抢到GIL锁,拿到这个数据,此时就造成了该数据的不安全。
原文:https://www.cnblogs.com/qiu-hua/p/12796554.html