返回介绍

E.2 可怕的 GIL

发布于 2024-01-27 21:43:10 字数 915 浏览 0 评论 0 收藏 0

GIL(Global Interpreter Lock,全局解释器锁)是 Python 解释器用于一次只用一个线程执行代码的一种机制。这意味着当你运行 Python 脚本时,即使上在一台多进程机器上,你的代码也会线性执行。这个设计最初的目的是让 Python 可以通过 C 代码快速地运行,但是仍然是线程安全的。

GIL 给 Python 带来的限制意味着在标准解释器中,Python 从来不会真正地并行化。这对于一些高 I/O 的应用程序,或者严重依赖多重处理的应用程序来说,是一个劣势。1 有些 Python 库通过使用多重处理或异步服务 2,规避了这些问题,但是它们没有改变 GIL 仍然存在的事实。

1关于 GIL 可视化的更多信息,查看 David Beazley 的“一个可缩放、可交互的 Python 线程可视化”(http://www.dabeaz.com/GIL/gilvis/)。

2关于这些包的功能,查看 Jeff Knupp 关于如何减轻 GIL 问题影响的文章(https://www.jeffknupp.com/blog/2013/06/30/pythons-hardest-problem-revisited/)。

即便如此,有很多 Python 核心开发者意识到由 GIL 带来的问题,还有它的好处。在 GIL 成为开发痛点的情况下,通常有不错的应对方案,而且根据你的需要,还有用 C 以外的其他语言编写的其他解释器可用。如果你发现 GIL 成为了代码中的一个问题,很可能你可以重新架构你的代码,或利用一个不同的代码基(例如 Node.js)来满足你的需求。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文