pythonGIL锁

一、GIL(Global Interpreter Lock)全局解释器锁是Python解释器中的一个机制,用于保证同一个时间只有一个线程能够执行Python字节码。这意味着在同一个时刻,只有一个线程能够访问共享的Python对象。

1、数据都是全局共享的,没有GIL锁的保护,多个线程同时访问时可能会造成数据的争抢,导致数据的不准确。
2、多个线程对用一个数据进行更新时,没有GIL锁的保护,很可能导致数据的不一致性和数据的损坏。

二、由于有GIL锁的存在,多线程是不能进行并行任务的,而多核的环境是可以使用多进程进行并行任务,因为每个进程中都会有各自的GIL锁,互不影响。

并行:指同一时刻多个任务同时执行;各自同时执行,不会抢占资源;只有多个cpu的时候才会有并行的发生,如果只有一个cpu是不会发生并行的。
并发:指同一时间段内有多个任务同时执行;指的是宏观的同时执行,会互相抢占资源的。

三、GIL锁的释放:
1、遇到I/O阻塞会自动释放GIL锁;
2、一个线程执行完成也会释放GIL锁。

四、如何避免使用GIL锁呢?
1、在进行I/O阻塞的操作任务的时候,可以使用多线程
2、使用多进程去实现任务
3、使用with nogil语句(此方法作者未使用过,是在网上看到的,读者们可以尝试一下)
————————————————

def test():
    with nogil:
        for i in range(10):
            print(i)
    return 2

相关推荐

  1. pythonGIL

    2024-03-20 04:44:02       45 阅读
  2. MYSQL <span style='color:red;'>锁</span>

    MYSQL

    2024-03-20 04:44:02      58 阅读
  3. mysql-<span style='color:red;'>锁</span>

    mysql-

    2024-03-20 04:44:02      41 阅读
  4. Mysql-<span style='color:red;'>锁</span>

    Mysql-

    2024-03-20 04:44:02      42 阅读
  5. MySQL <span style='color:red;'>锁</span>

    MySQL

    2024-03-20 04:44:02      33 阅读
  6. MySQL<span style='color:red;'>锁</span>

    MySQL

    2024-03-20 04:44:02      28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-20 04:44:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-20 04:44:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-20 04:44:02       82 阅读
  4. Python语言-面向对象

    2024-03-20 04:44:02       91 阅读

热门阅读

  1. 亚马逊认证考试系列 - 知识点 - WAF简介

    2024-03-20 04:44:02       42 阅读
  2. UDF提权

    UDF提权

    2024-03-20 04:44:02      42 阅读
  3. Mongodb使用手册

    2024-03-20 04:44:02       37 阅读
  4. Nginx安装教程

    2024-03-20 04:44:02       45 阅读
  5. 【NC15434】wyh的迷宫

    2024-03-20 04:44:02       49 阅读
  6. LeetCode //C - 239. Sliding Window Maximum

    2024-03-20 04:44:02       38 阅读
  7. 5.1.4、【AI技术新纪元:Spring AI解码】Amazon Bedrock

    2024-03-20 04:44:02       35 阅读
  8. 2024.3.19 ARM

    2024-03-20 04:44:02       45 阅读