Python中GIL全局解释锁的实现

 更新时间:2023年03月28日 11:12:34   作者:小Pawn爷  
本文主要介绍了Python中GIL全局解释锁的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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

到此这篇关于Python中GIL全局解释锁的实现的文章就介绍到这了,更多相关Python GIL全局解释锁内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python中数字列表转化为数字字符串的实例代码

    python中数字列表转化为数字字符串的实例代码

    先前学习过,数字和字符串都可以存储到变量当中,下面这篇文章主要给大家介绍了关于python中数字列表转化为数字字符串的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • 出现module 'queue' has no attribute 'Queue'问题的解决

    出现module 'queue' has no attrib

    这篇文章主要介绍了出现module 'queue' has no attribute 'Queue'问题的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Python基于高斯消元法计算线性方程组示例

    Python基于高斯消元法计算线性方程组示例

    这篇文章主要介绍了Python基于高斯消元法计算线性方程组,结合实例形式分析了Python高斯消元法针对方程组求解的相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例

    Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例

    这篇文章主要介绍了Python基于分析Ajax请求实现抓取今日头条街拍图集功能,涉及Python针对今日头条URL请求与json数据处理相关操作技巧,需要的朋友可以参考下
    2018-07-07
  • Python实现TXT数据转三维矩阵

    Python实现TXT数据转三维矩阵

    在数据处理和分析中,将文本文件中的数据转换为三维矩阵是一个常见的任务,本文将详细介绍如何使用Python实现这一任务,感兴趣的小伙伴可以了解下
    2024-01-01
  • python控制台显示时钟的示例

    python控制台显示时钟的示例

    这篇文章主要介绍了python控制台显示时钟的示例,需要的朋友可以参考下
    2014-02-02
  • 基于OpenCV的摄像头测距的实现示例

    基于OpenCV的摄像头测距的实现示例

    本文主要介绍了基于OpenCV的摄像头测距的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Python实现GPU加速图像处理的代码详解

    Python实现GPU加速图像处理的代码详解

    这篇文章主要为大家详细介绍了Python实现GPU加速图像处理的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-04-04
  • 数据挖掘之Apriori算法详解和Python实现代码分享

    数据挖掘之Apriori算法详解和Python实现代码分享

    这篇文章主要介绍了数据挖掘之Apriori算法详解和Python实现代码分享,本文先是对Apriori算法做了详细介绍,然后给出了Python版实现代码,需要的朋友可以参考下
    2014-11-11
  • python中os.environ基本介绍及使用方法

    python中os.environ基本介绍及使用方法

    os.environ是Python中的一个字典对象,它包含了当前进程的环境变量,通过使用os.environ,可以获取和设置环境变量的值,这篇文章主要介绍了python中os.environ基本介绍及使用方法,需要的朋友可以参考下
    2023-08-08

最新评论