zoukankan      html  css  js  c++  java
  • 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锁,就不会出现进程中该线程抢锁的情况。

        使用协程的原因 : 

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

  • 相关阅读:
    flex自适应小例子
    hasOwnProperty 递归 简单回调 链式调用
    H5音频和视频
    html特殊字符
    css巧妙实现分隔线
    SQL Server中数据的存储
    SQL高级查询
    SQL SERVER查询到的数据转为Json格式
    SQL动态生成列
    SQL合并查询数据,以逗号分隔
  • 原文地址:https://www.cnblogs.com/Mryang123/p/10040415.html
Copyright © 2011-2022 走看看