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锁,就不会出现进程中该线程抢锁的情况。

        使用协程的原因 : 

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

  • 相关阅读:
    织梦开发——相关阅读likeart应用
    织梦标签教程
    织梦专题调用代码
    HIT 2543 Stone IV
    POJ 3680 Intervals
    HIT 2739 The Chinese Postman Problem
    POJ 1273 Drainage Ditches
    POJ 2455 Secret Milking Machine
    SPOJ 371 Boxes
    HIT 2715 Matrix3
  • 原文地址:https://www.cnblogs.com/Mryang123/p/10040415.html
Copyright © 2011-2022 走看看