为什么在python中有全局解释器锁,但Java,C++中却没有

2024-11-25 07:49:58
推荐回答(2个)
回答1:

Python语言并没有GIL。
CPython(以及试图与CPython完全兼容的)实现中有GIL。PyPy的主线中也有GIL。
Jython、IronPython都没有GIL。

Java语言并没有GIL。JVM规范也没有GIL。
目前JVM最主要的实现HotSpot VM中没有使用GIL,而是在VM内使用了一系列细粒度锁来实现VM内各种功能分别的同步需求。但其实HotSpot VM源自一个名为Strongtalk的Smalltalk VM,在Stongtalk VM以及最早期的HotSpot VM中是有GIL的,通过多年的努力研发才把它替换为细粒度锁。

C++语言没有GIL。C++的语言功能中也没有什么需要用一把全局大锁来总控的功能,所以实现中也没有C++ runtime library用“GIL”的(虽然有通过解释器实现的C++,所以这个“I”在这些实现里也算是成立把,但没有GIL)。

回答2:

历史原因。c++在c++11之前都是一点都没有线程概念的,全靠程序员自己实现线程管理和线程同步。而python诞生的时候还没有多核处理器,所以为了简化开发实现了GIL,后来很多库都假设python有GIL,想改也改不了了。Java开始和C++很像,后来加入了多线程的支持,没有走python这条路。类似的还有javascript(nodejs),设计的就是单线程,通过多进程而不是多线程来挖掘多核处理器的潜力。