其他语言是如何克服Python的限制的;吉尔是谁?

其他语言是如何克服Python的限制的;吉尔是谁?,python,multithreading,concurrency,Python,Multithreading,Concurrency,随着行业趋向于“web规模”的应用程序体系结构(就像我讨厌流行语一样),我知道Python在如何处理并发性方面受到了很多批评,并成为了一个瓶颈。我表面上理解这个问题,但还不足以了解其他过程语言是如何处理线程的。Java也有类似的问题吗?C#?红宝石?如果没有,为什么Python没有采用相同的策略?GIL的存在是因为CPython实现引用计数(这是一种垃圾收集方法)需要它。让我们明确一点,Python没有GIL,参考实现有,它只是一个实现细节 GIL的存在是因为它使实现变得简单和快速,而且在大多数

随着行业趋向于“web规模”的应用程序体系结构(就像我讨厌流行语一样),我知道Python在如何处理并发性方面受到了很多批评,并成为了一个瓶颈。我表面上理解这个问题,但还不足以了解其他过程语言是如何处理线程的。Java也有类似的问题吗?C#?红宝石?如果没有,为什么Python没有采用相同的策略?

GIL的存在是因为CPython实现引用计数(这是一种垃圾收集方法)需要它。让我们明确一点,Python没有GIL,参考实现有,它只是一个实现细节

GIL的存在是因为它使实现变得简单和快速,而且在大多数情况下,它根本不重要。线程主要设计为允许在处理过程中访问较慢的资源,而GIL根本不妨碍这一点

GIL成为问题的唯一原因是人们想在哪里进行大量并行计算。在这种情况下,可以用C语言制作一个扩展模块,或者使用
多处理
模块来侧移GIL

所有这些都意味着GIL在99.9%的时间里都不是一个问题,当它是一个问题时,它很容易解决。如果您发现它确实阻碍了您的工作,那么您可能希望尝试Jython,它是在JVM之上实现的,并且使用一种不需要GIL的不同的垃圾收集方法


和往常一样,过早优化是一个坏主意——如果你开发了一些东西,发现自己被GIL伤害了,那么有一些方法可以轻松解决它。也就是说,在现实世界中,你很难发现这是一个问题。这是围绕Python的最夸张的东西之一(可能仅次于整个缩进的东西)。

Nit:GIL是CPython的产物;Python语言中没有需要GIL的固有特性。事实上,Jython和IIRC IronPython没有GIL,它们的多线程能力与底层JVM/CLR一样。这不仅仅是引用计数。可以为refcounting添加细粒度(每个对象)锁(速度非常慢,至少没有大规模的进一步更改),而且不仅仅是refcounting目前不是线程安全的,因为它依赖于GIL进行同步。@delnan为了更清楚一点而编辑。我还是不说主要内容(这是关于GC的吗?它不是“停止了世界”吗?)。如果GIL消失,可能有一半的内置对象方法需要锁。除此之外,你没有回答一半的问题(其他语言都做了什么)。问题中其他语言的功能部分并不适合,因为这是一个购物清单。我回答了问题中更具建设性的部分。我相信答案不必是购物清单,基本上只有一种方法(锁定少于整个译员).我会自己写一个答案,但是你已经把关于CPython动机的部分写得很好了,而且我不是其他语言实现方面的专家。