其他语言如何克服Python GIL的限制?

时间:2012-12-20 01:19:51

标签: python multithreading concurrency

随着行业趋向于“网络规模”应用程序架构(尽管我讨厌流行语),我知道Python已经引起了很多批评GIL如何处理并发并成为瓶颈。我理解表面上的问题,但不足以知道其他过程语言如何处理引擎下的线程。 Java有类似的问题吗? C#?红宝石?如果没有,为什么Python没有采用相同的策略?

1 个答案:

答案 0 :(得分:7)

GIL的存在是因为它(主要)需要CPython实现引用计数 - 它是垃圾收集的方法。所以我们要清楚, Python 没有GIL,参考实现没有,它只是一个实现细节。

GIL的存在是因为它使实现变得简单快速,而且大多数时候,它无关紧要。线程主要是为了允许在处理过程中访问缓慢的资源,GIL根本不会受到阻碍。

GIL可能成为一个问题的唯一原因是人们想要进行大量的并行计算。在这种情况下,可以在C中创建扩展模块,或使用multiprocessing模块来支持GIL。

所有这些意味着GIL在99.9%的时间内确实不是问题,而且当它出现时,它很容易解决。如果你发现确实阻碍了你,那么你可能想尝试Jython,它是在JVM之上实现的,并使用不需要GIL的不同垃圾收集方法。

与往常一样,过早优化是一个坏主意 - 如果你开发了一些东西并且发现自己受到了GIL的伤害,那么有很多方法可以解决它而不会有太大的痛苦。也就是说,你不太可能在现实世界中发现它是一个问题。这是围绕Python最夸张的事情之一(可能仅次于整个缩进事物)。