Python中GIL全局解释锁的实现

作者:小Pawn爷 时间:2023-04-27 16:29:14 

GIL(Global Interpreter Lock,即全局解释器锁)

1.为什么有GIL

设计者为了规避类似于内存管理这样的复杂的竞争风险问题(race condition)

因为 CPython 大量使用 C 语言库,但大部分C语言库都不是原生线程安全的(线程安全会降低性能和增加复杂度)

2.GIL 是如何工作的

多个线程执行时,每一个线程在开始执行时,都会锁住 GIL,以阻止别的线程执行,同样的,每一个线程执行完一段后,会释放 GIL,以允许别的线程开始利用资源

CPython 中还有另一个机制,叫做 check_interval, CPython 解释器会去轮询检查线程 GIL 的锁住情况.每隔一段时间,Python 解释器就会强制当前线程去释放 GIL,这样别的线程才能有执行的机会

for (;;) {
   if (--ticker < 0) {
       ticker = check_interval;

/* Give another thread a chance */
       PyThread_release_lock(interpreter_lock);

/* Other threads may run now */

PyThread_acquire_lock(interpreter_lock, 1);
   }

bytecode = *next_instr++;
   switch (bytecode) {
       /* execute the next instruction ... */
   }
}

3.python的线程安全

有了GIL,任然在编程时需要考虑线程安全

4.如何如何绕过 GIL?

绕过 CPython,使用 JPython(Java 实现的Python解释器)等别的实现
把关键性能代码,放到别的语言(一般是 C++)中实现

5.在处理cpu密集型任务时,为什么有时候使用多线程会比单线程还要慢些?

GIL采用轮流运行线程的机制,GIL需要在线程之间不断轮流进行切换,线程如果多或者运行时间较长,切换带来的性能损失可能超过单线程

6 .你觉得 GIL 是一个好的设计吗?

事实上,在 Python 3 之后,确实有很多关于 GIL 改进甚至是取消的讨论,你的看法是什么呢?你在平常工作中有被 GIL 困扰过的场景吗?

GIL任然是一个好的设计虽然损失了性能,但在保证资源不会冲突和预防死锁方面有一定作用

来源:https://blog.csdn.net/weixin_44689630/article/details/129776268

标签:Python,GIL,全局解释锁
0
投稿

猜你喜欢

  • Python json模块dumps、loads操作示例

    2023-01-03 20:16:29
  • Python脚本如何在bilibili中查找弹幕发送者

    2021-05-18 21:46:15
  • 使用Jupyter notebooks上传文件夹或大量数据到服务器

    2023-02-26 11:49:16
  • window.location 对象所包含的属性

    2024-04-16 10:32:14
  • PyTorch实现图像识别实战指南

    2022-01-08 14:27:24
  • thinkphp四种url访问方式详解

    2024-05-05 09:16:50
  • Python实现端口复用实例代码

    2023-12-16 19:58:32
  • asp如何自动反馈电子邮件?

    2002-01-01 06:54:00
  • 基于Keras的格式化输出Loss实现方式

    2021-10-20 20:44:00
  • Python写安全小工具之TCP全连接端口扫描器

    2023-12-30 13:34:52
  • 基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能

    2024-06-07 15:29:45
  • MYSQL METADATA LOCK(MDL LOCK)MDL锁问题分析

    2024-01-15 04:45:54
  • Python常用时间操作总结【取得当前时间、时间函数、应用等】

    2021-01-12 20:32:33
  • Django利用elasticsearch(搜索引擎)实现搜索功能

    2022-04-30 01:59:37
  • 网页设计:巧用记事本编辑网页

    2008-02-05 09:00:00
  • python optparse模块使用实例

    2021-02-03 22:01:36
  • PHP伪协议基本原理介绍

    2023-05-30 00:24:11
  • python处理文本文件实现生成指定格式文件的方法

    2022-01-07 21:41:43
  • Python打包为exe详细教程

    2023-08-23 03:00:21
  • MySQL将select结果执行update的实例教程

    2024-01-17 14:00:59
  • asp之家 网络编程 m.aspxhome.com