GIL 锁或将在 CPython 中成为可选项
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
近日,Python 指导委员会计划通过 PEP 703 提案,旨在将全局解释器锁(GIL)设为 CPython 中的可选项。GIL的可选化预计将加强 Python 在多核处理器上的并行处理能力,提升多线程程序性能。提案中建议新增一个配置项 --disable-gil,以便用户可自主关闭或开启 GIL。
PEP 703 提案的通过意味着 Python 正在逐步成为一个支持多线程和并发的语言。GIL 的存在是由于 Python 的内存管理系统并不支持多线程访问,为了保证线程安全,GIL 让只有一个线程可以同时访问对象。尽管过去多个项目试图移除 GIL 提升多线程性能,但往往以牺牲单线程性能为代价,这对于大多数使用单线程的 Python 应用程序来说并不划算。
为了解决 GIL 的问题,提案中提出了多种方法来保障引用计数的线程安全,同时尽量减少对单线程程序性能的影响。这些方法包括:
- Biased reference counting,区别对待单线程和多线程对象的引用计数。
- Immortalization,免去某些永不回收对象的引用计数。
- Thread-safe memory allocation,改进垃圾收集器以便线程安全地分配内存。
- Deferred reference counting,延迟特定对象的引用计数。
- A revised garbage collector,修改垃圾收集器以优化循环引用处理。
实现 PEP 703 是个长期项目,计划分为三个阶段:
- no-GIL 版本首先作为可选项推出,供社区实验性使用。
- 随后,no-GIL 构建将成为 CPython 支持的正式版本之一。
- 最终,no-GIL 构建将设为默认选项,GIL 相关代码从 CPython 中移除。
尽管技术挑战颇多,但更大的挑战在于保持 Python 生态系统的连贯性并确保 no-GIL Python 不引入新问题。考虑到 Python 2 到 Python 3 的过渡带来的困难,此次改变必须保持向后兼容性。总的来说,尽管移除 GIL 存在风险和挑战,但它也带来了 Python 在并行处理上所期望的巨大潜力。
文章最后,作者鼓励读者通过“一键三连”支持作者,以此作为写作的动力。
想要了解更多内容?