GIL:全局解释器锁(cpython中)
GIL产生的背景,由于C语言底层原因,CPpython中多线程运行,每个线程都需要申请全局资源,但是Cpython并不能应对所有线程同时的资源请求,为防止发生错误,对所有线程申请全局资源的时候增加了限制--全局解释器锁。(造成线程只能一个一个的运行)
GIL释放:当前线程执行超时(Python计时器)会自动释放,如果当前线程没有超时但执行结束也会释放,当前线程执行阻塞操作时也会自动释放(如IO操作,等待操作,下载操作)
GIL只是CPython中的全局解释器锁,如果使用其他Python解释器则没有GIL这个名词。
CPython中创建的每个线程在执行的过程中都要需要先获取GIL,保证同一个时刻只有一个线程可以执行代码
python使用多进程是可以利用多核的CPU资源的
 
 
既然CPython中有GIL,还有必要在CPython使用多线程吗?
 由于GIL锁在线程遇到阻塞操作时会释放,进而执行另一个线程,所以如果使用多线程执行IO密集型操作是有性能提升的,但是如果使用多线程执行计算密集型操作是没有性能提升的。
 
 
既然CPython中有GIL,还有必要在CPython中使用线程锁(Lock互斥锁)吗?
 因为GIL的释放时机我们无法控制,很可能操作并没有完成,而Lock是我们用完后手动释放(操作完整)。
线程1 取出全局变量 g_number == 0 一直加到20000,但是还没有来得及将20000写入g_number中,就超时了自动释放GIL 而线程2 取出g_number==19999 加到39999由于超时自动释放GIL 此时线程2获取到GIL继续着未完成的事业将20000写入g_number。结果就会是错误的,如果进行互斥锁,会完成成功计算。
 

CPython中的GIL的更多相关文章

  1. 线程之 CPthon中的GIL与Lock的分析与解决办法

    Cpython 中的GIL锁介绍 1. 前戏 In CPython, the global interpreter lock, or GIL, is a mutex that prevents mul ...

  2. 线程安全及Python中的GIL

    线程安全及Python中的GIL 本博客所有内容采用 Creative Commons Licenses 许可使用. 引用本内容时,请保留 朱涛, 出处 ,并且 非商业 . 点击 订阅 来订阅本博客. ...

  3. python中的GIL详解

    GIL是什么 首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念.就好比C++是一套语言(语法)标准,但是可以用不同的编译器来编译成可 ...

  4. 聊聊Python中的GIL

    对于广大写Python的人来说,GIL(Global Interpreter Lock, 全局解释器锁)肯定不陌生,但未必清楚GIL的历史和全貌是怎样的,今天我们就来梳理一下GIL. 1. 什么是GI ...

  5. Python中对于GIL全局解释器锁的一点理解

    GIL全局解释器锁 python最初开发时,开发人只考虑到了单核CPU的,为解决多线程运算之间的数据完整性和状态同步选择了加锁的方式.即GIL锁. 而目前的CPU都有多个核心,在运行python的某个 ...

  6. python 中的GIL (全局解释器锁)详解

    1.GIL是什么? GIL全称Global Interpreter Lock,即全局解释器锁. 作用就是,限制多线程同时执行,保证同一时间内只有一个线程在执行. GIL并不是Python的特性,它是在 ...

  7. 深入理解Python中的GIL(全局解释器锁)

    深入理解Python中的GIL(全局解释器锁) Python是门古老的语言,要想了解这门语言的多线程和多进程以及协程,以及明白什么时候应该用多线程,什么时候应该使用多进程或协程,我们不得不谈到的一个东 ...

  8. Python中的GIL

    •start 线程准备就绪,等待CPU调度 •setName 为线程设置名称 •getName 获取线程名称 •setDaemon 设置为后台线程或前台线程(默认) 如果是后台线程,主线程执行过程中, ...

  9. 【转】Python中的GIL、多进程和多线程

    转自:http://lesliezhu.github.io/public/2015-04-20-python-multi-process-thread.html 目录 1. GIL(Global In ...

随机推荐

  1. ubuntu12.04 eclipse安装PyDev

    在ubuntu软件中心安装的eclipse版本为3.7,install new software时,搜索出来的PyDev版本较高(5.6...): 高版本的PyDev要求较高版本的eclipse.详情 ...

  2. CSS - 自学笔记

    2018-12-14 ----- 1 所有元素的锚点默认就是它的物理中心 2 改变锚点位置的方法: transform-origin: x-axis y-axis z-axis; 3 ps里在层级里选 ...

  3. 10 ~ express ~ 使用 cookie 保存用户 信息

    思维导图: (1) 保存 cookie (2)销毁 cookie 一,保存 cookie 1,app.js  . 新增代码 var Cookies = require('cookies') /** * ...

  4. POJ_3122 经典二分题

    Pie Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8594   Accepted: 3124   Special Jud ...

  5. 吴裕雄--天生自然Django框架开发笔记:Django 创建第一个项目

    Django 管理工具 安装 Django 之后,您现在应该已经有了可用的管理工具 django-admin.可以使用 django-admin 来创建一个项目: 可以来看下django-admin ...

  6. quartz详解3:quartz数据库集群-锁机制

    http://blog.itpub.NET/11627468/viewspace-1764753/ 一.quartz数据库锁 其中,QRTZ_LOCKS就是Quartz集群实现同步机制的行锁表,其表结 ...

  7. 51nod1007:正整数分组 DP

    1007 正整数分组 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 ...

  8. 51nod 1438:方阵与完全平方数

    1438 方阵与完全平方数 题目来源: mostleg 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 如果一个由正整数组成的n*n的方阵,满足以下 ...

  9. mnist lenet caffe 测试

    # -*- coding: utf-8 -*-import sysimport numpy as npimport structfrom PIL import Imageprint "hel ...

  10. Cordova搭建环境与问题小结

    1.Cordova介绍: Apache Cordova是一套设备API,允许移动应用的开发者使用JavaScript来访问本地设备的功能,比如摄像头.加速计.它可以与UI框架(如jQuery Mobi ...