Python的吉尔是软件世界上最大的错误吗?

Java教程 2025-08-26

摩尔定律和python的缺陷逻辑

当语言架构师设计Python时,他们无法想象一个计算机拥有多个核心的世界。

在1980年代和1990年代,软件工程师大大押注摩尔定律,该法律断言,综合电路上的晶体管数量将每两年翻一番。推论的速度也是如此。

将这种大米在棋盘场景上取得逻辑,指数结论在相对较短的时间内有效地达到无限的CPU速度。

Python多线程

在这种逻辑的指导下,Python Inventor Guido Van Rossum围绕了Python的所有多线程功能,围绕着致命缺陷的假设,即未来的计算机只有一个,便宜的,无限的快速CPU。

Python的全球解释器锁(GIL)是建立的,假设所有操作都将发生在此单一核心上。具有多个CPU的计算机,电话或微设备根本不是考虑因素。

当然,越来越快的CPU并不是计算机硬件的方向。芯片设计师不是更快的CPU,而是缩小了CPU并将多个核心嵌入芯片上。

“突然之间,'并联做事'的压力都达到了所有的压力,这就是我们在python中的解决方案没有起作用,” Python的创作者Guido Van Rossum在Lex Fridman Podcast上说。 “那是吉尔臭名昭著的那一刻。”

这就是为什么在Python发明30多年后,这是一个多线python应用程序,它在带有256个内核的企业服务器上运行,使其中255个核心置于空闲状态。

Python无法跨核心。

Python应用程序可以进行多线程,但是这些线程不能跨内核运行。这一切都发生在单个单独的CPU上,无论系统中存在多少个CPU。

Python的并发

Python对并发和并行性的概念采用了独特的方法。多读Python应用程序无法执行真正的并行计算。相反,他们只是创造了平行性的幻想。

为了实现这一目标,Python安排了一个线程以进行几个CPU周期,然后中断该线程以允许另一个线程运行。Multiplepython threads划分了单个CPU上的所有可用调度插槽。

如果处理器足够快,这会产生这样一种感觉,即即使所有内容都是串行的,都可以并行运行多个过程。

这再次是上述播客中的van Rossum,解释了Python的多线程库的创建背后的逻辑:“我们将提供看起来像线程的东西,并且只要您在计算机上只有一个CPU(大多数计算机)(当时大多数计算机都可以做到这一点),就像线程一样 - 就像线程一样。”

Python并行性是一种幻想

Python支持多线程,但是这些线程都在同一CPU上串行运行。什么都没有并联。所有Python应用程序均为CPU结合。

无法跨核心的线程是Python平台架构中的一个基本缺陷,因为GIL是在大约30年前发明的,因此永久烘烤到该平台上。

从那以后,开发人员一直在尝试修复GIL,但无济于事。

即使是Python 2和Python 3之间令人尴尬的向后兼容性突破也不足以解决这个问题。这是Python可能永远无法纠正的基本缺陷。

从启动时,诸如Java和C#等更现代的编程语言的建筑师从他们开始的日子就可以理解计算机硬件的未来将是多功能机器。

在Java在1996年的正式发布之前,其建筑师提供了API,使程序能够跨越无限数量的核心。 Python的发明家是Java虚拟机设计背后的核心概念。

每种现代编程语言都支持跨核心的线程。 Python可能永远不会。

您如何修复Python的Gil?

那么Python开发人员可以做些什么来解决有缺陷的GIL和Python的多线程错误?不多。

支持者已经投资了数千小时零数百万美元,以创建各种不兼容的类似Python的图书馆,以解决Python过去的错误。

这些昂贵的努力导致了Python世界上的大量分裂,那里的许多Python应用程序被部署到生产或与语言模型一起使用,实际上无法按照Python的标准安装进行运行。

这种分裂在Python社区造成了生存危机。毕竟,如果您编写的Python代码与其他人编写的Python代码不兼容,并且每个人的代码都无法在标准Python平台上运行,您真的可以将任何不相容的代码称为“ Python?”

多线程python?

几个项目旨在用多线程核心替换GIL,但是这些项目实际上使单线Python应用程序运行较慢。鉴于Python应用程序已经运行500%-1000%慢的Java应用程序,这是一个真正的问题。

Python最近推出了PEP 703,这是一项提议,旨在使GIL在未来的Python发行中进行可选。但是,目前尚不清楚这是否可以实现,而不会严重损害Python与最受欢迎的第三方库的互操作性。在集成到多线程系统中时,为标准GIL编写的库不太可能工作。

从最常用的Python实施Cpython中删除GIL可能会在已经散布的景观中导致进一步的分裂。

Python和Project Mojo

由新的,不兼容的python味道的扩散引起的最新试图结束行业破裂,是python的另一种新风味,名为Mojo。

Mojo项目由Python社区中一些最伟大的头脑牵头,是Python的超集团。

就像Microsoft创建了打字稿来修复JavaScript的许多缺陷一样,Mojo希望与Python这样做。

Mojo可以修复Python吗?

这个有前途的新项目希望完成以下内容:

  • 将多核多线程添加到Python。

  • 在Python中添加真正的强大打字功能。

  • 大大提高了Python的性能。

修复Python是一项艰巨的任务,但是如果一切按计划到2026年的计划进行,Python开发人员将拥有Java Devs自1996年发布以来Java Devs所享有的所有功能,功能和运行时性能。

Python vs Java

如果您是Python Dev,他等不及2026年才能获得强大的打字和多项螺纹支持,那么还有其他选择。

Python的优势之一是它使用更现代的编程语言编写的代码的能力。大多数用Python编写的大数据科学库只是轻巧的包装器,它们称呼其他语言,例如朱莉娅或C封面。那些其他语言是真正的工作。

如果您是软件工程师,并且需要在Python程序中进行真正的多线程功能,则可以在Java中编写螺纹应用程序,然后在需要进行一些繁重举重的时候让Python代码调用Java代码。

或者,您可以在Java中写下您的程序。这可能会为您节省很多头痛。