jam*_*ieb 2 python concurrency multithreading
随着行业趋向于"网络规模"应用程序架构(尽管我讨厌流行语),我知道Python已经引起了很多批评,因为GIL如何处理并发并成为瓶颈.我理解表面上的问题,但不足以知道其他过程语言如何处理引擎下的线程.Java有类似的问题吗?C#?红宝石?如果没有,为什么Python没有采用相同的策略?
GIL的存在是因为它(主要)需要CPython实现引用计数 - 它是垃圾收集的方法.所以我们要清楚,Python没有GIL,参考实现也是如此,它只是一个实现细节.
GIL的存在是因为它使实现变得简单而快速,而且大多数时候,它并不重要.线程主要是为了允许在处理过程中访问缓慢的资源,GIL根本不会受到阻碍.
GIL可能成为问题的唯一原因是人们想要进行大量的并行计算.在这种情况下,可以在C中制作扩展模块,或者使用multiprocessing
模块对GIL进行侧移.
所有这些意味着GIL在99.9%的时间内确实不是问题,而且当它出现时,它很容易解决.如果你发现它确实阻碍了你,那么你可能想尝试Jython,它是在JVM之上实现的,并使用不需要GIL的不同垃圾收集方法.
与往常一样,过早优化是一个坏主意 - 如果你开发了一些东西并且发现自己受到了GIL的伤害,那么有很多方法可以解决它而不会有太多痛苦.也就是说,你不太可能在现实世界中发现它是一个问题.这是围绕Python最夸张的事情之一(可能仅次于整个缩进事物).