跳转至

小心Python GIL

GIL 是一种用于实现标准 Python(称为 CPython)的一种机制,以避免由不同线程同时执行字节码。 Python 中 GIL 的存在是该语言用户之间激烈讨论的一个原因。 选择 GIL 是为了保护 CPython 解释器使用的内部内存,它没有为线程的并发访问实现同步机制。 无论如何,当我们决定使用线程时,GIL 会导致问题,而这些线程往往受 CPU 限制。 例如,I/O 线程不在 GIL 的范围之内。 也许该机制对 Python 的演变带来的好处多于对它的伤害。 显然,我们不能仅将速度视为判断某事好坏的单一论据。

在某些情况下,使用多进程配合消息传递能更好的平衡可维护性、可扩展性以及性能之间的关系。 可即便如此,在某些情况下确实需要线程,这将被 GIL 制服。 在这些情况下,可以做的就是用C语言编写一些代码作为扩展,并将它们嵌入到Python程序中。 因此,还有其他选择; 由开发人员分析真正的必要性。 那么,问题来了:一般来说,GIL 是反派吗?重要的是要记住,PyPy 团队正在研究 STM 实现,以便从 Python 中删除 GIL。 有关该项目的更多详细信息,请访问 http://pypy.org/tmdonate.html


最后更新: 2023年2月28日
创建日期: 2023年2月28日