准确的电话号码和 WhatsApp 号码提供商。 如果您想要电子邮件营销活动列表或短信营销活动,那么您可以联系我们的团队。 电报: @xhie1

Python 中删除 GIL并行处理的创新进展

经过多次辩论,Python 指导委员会决定批准PEF 703提案,“让全局解释器锁在 CPython 中成为可选”。该提案是多年来消除 Python 全局解释器锁 (GIL) 努力的结晶。删除 GIL 消除了多线程的主要障碍,使 Python 成为真正的多核语言,并大大提高了利用并行性的工作负载的性能。这一提议使 Python 对多线程和并发的一流支持更接近现实。

 

为什么要去掉Python的GIL

Python 的内存管理系统通过维护每个对象的引用计数来跟踪对象的使用情况。引用计数降至 0 的对象将被删除。Python 是在多处理器系统很少见、多核处理器根本不存在的时代创建的语言,因此这种引用计数机制不是线程安全的。相反,Python 通过一次只允许一个对象处理一个线程来确保线程安全。这就是 GIL 的用途。

多年来,许多项目都尝试删除 GIL,虽然结果实际

提高了多线程程序的速度,但却导致单线程程序的性能变慢。考虑到大多数 Python 应用程序都是单线程的,这是一个代价 新西兰电话号码数据 高昂的妥协。此外,虽然多线程应用程序的处理随着GIL的改进而有所改善,但仍然是一个严重的瓶颈。Python 核心开发人员最终决定从 CPython 中删除 GIL,前提是删除它不会减慢单线程程序的速度。

Python 在没有 GIL 的情况下如何工作
当前针对 no-GIL Python 版本的提案使用了多种技术的组合来确保引用计数的线程安全,同时对单线程程序的速度没有影响或影响最小。

有偏差的引用计数。仅由单个线程访问的对象的计数的处理

电话号码 数据

方式与由多个线程访问的 欧洲邮件 对象的计数不同(更快)。大多数对象仅由单个线程访问,因此对单线程程序的影响很小。
不朽。像 None 这样的对象不需要释放,因此也不需要跟踪它们的引用计数。
线程安全的内存分配。CPython 的新对象内存分配系统使垃圾收集器更容易跟踪对象并以线程安全的方式分配内存。
延迟引用计数。某些对象(例如模块的顶级函数)的引用计数可以安全地延迟。这既节省了时间又节省了

Leave a Reply