• GIL学习


    GIL锁

    一、GIL的简单概述

    二、GIL对于多线程的影响

    三、解决GIL对于多线程影响的方案

    回到顶部

    一、GIL的简单概述

      1.概念

        GIL ( Global Interperter Lock ) 称作 全局解释器锁

        

      2.特性

    GIL 只在 CPython 解释器中存在

    线程互斥锁是 Python 代码层面的锁

    GIL 是 Python 解释器层面的锁

    互斥锁和 GIL 锁都是用来解决多个线程中的共享变量的竞争资源问题。

    二、GIL对于多线程的影响

      1.程序分类

        计算密集型 :

          计算密集型任务的特点是要进行大量的计算,消耗CPU资源.  例如 : 复杂的加减乘除, 让CPU处于满负荷的状态

        IO密集型 :

          IO密集型任务涉及到网络、磁盘IO的任务都是IO密集型任务,这类任务的特点是CPU消耗很少,任务的大部分时间都在等待IO操作完成 例如 : 硬盘的操作

      2.GIL锁的释放条件

        多线程的程序中 :  由于 GIL 的存在,Python 同一时刻只有一个线程在执行, 无法有效利用多核 CPU

        1. 时间片结束

        2. 程序遇到IO等待

        3. 解释器执行字节码到达一定的数量,默认是100条

      3.GIL对于计算密集型与IO密集型的影响

        计算密集型 :

           计算密集型任务,同一时刻,由于只有一个CPU对其进行操作, 从而使多线程程序有且只有一个线程可以执行,程序执行效率降低

        IO密集型 : 

          IO密集型任务,GIL遇到IO操作就释放锁, 这样可以有效的利用多核优势, 进而让效率会稍有提高, 

    三、解决GIL对于多线程影响的方案

      1.使用多线程 + 协程实现多任务

        使用多进程的原因 :

           多进程下的子进程会复制主进程环境,使每一个进程中都有一个GIL锁,就不会出现进程中该线程抢锁的情况。

        使用协程的原因 : 

          协程本身就是在一个线程中切换执行,所以不会受到锁的影响

  • 相关阅读:
    python连接redis
    python3进行md5加密
    python操作mysql数据库
    python3操作excle
    memcache与redis的存储类型
    模块
    函数
    json与字典相互转换
    常用的Random函数
    字符串常用方法
  • 原文地址:https://www.cnblogs.com/Mryang123/p/10040415.html
Copyright © 2020-2023  润新知