20191031:GIL全局解释锁

总结关于GIL全局解释锁的个人理解

GIl全局解释锁,本身不是Python语言的特性,而是Python语言底层的c Python解释器的一个特性。在其他解释器中是没有这个概念的,比如说jpython和pypy.
什么是解释器呢?就是说我们本身写的Python语言是可视化语言的计算机是不能够理解并执行的,计算机本身它是只能够识别二进制信号的。就是他这种二进制信号是通过模拟电路的通电和断电来模拟01来进行。
基于上述概念,那么每一个python文件想要被执行,都需要解释器来进行Python代码的解释,也就是编译的过程.
Python在内存管理中依赖于gc,Gc本身也是需要一个线程去执行的,也就是说比如说我要回收垃圾嘛,那我也要有一个线程去找系统里面的垃圾。那基于这样的一个场景呢,也就是说一个python代码在内存中执行同时内存中至少会有2个以上线程在运行!那么就有一种场景如下:
在不加锁的情况下,当垃圾回收机制线程发现某一个变量如x的引用次数为0,垃圾回收线程准备回收这个变量的内存空间,这个时候Cpu突然切换到了另外一个线程,比如说在另外一个线程里面此时又用到了x的地址引用,然后时间片到了以后,CPU再次切换到垃圾回收线程,然后垃圾回收线程继续回收这个x的内存空间,然后CPU再次切换到了引用x的这个线程的时候,发现x已经被回收了,就会导致资源的混乱。因此我们需要一个全局解释锁在里面把这个分配内存和回收内存这个操作加锁,你加了锁以后垃圾回收线程去回收的时候就发现啊,这个被锁住了回收不了。

20191031:GIL全局解释锁的更多相关文章

  1. GIL全局解释锁,死锁,信号量,event事件,线程queue,TCP服务端实现并发

    一.GIL全局解释锁 在Cpython解释器才有GIL的概念,不是python的特点 在Cpython解释器中,同一个进程下开启的多线程,同一时刻只能有一个线程执行,无法利用多核优势. 1.GIL介绍 ...

  2. ~~并发编程(十一):GIL全局解释锁~~

    进击のpython ***** 并发编程--GIL全局解释锁 这小节就是有些"大神"批判python语言不完美之处的开始 这一节我们要了解一下Cpython的GIL解释器锁的工作机 ...

  3. python中的GIL(全局解释锁)多线程能够提升效率

    预启动的时候,应用程序仍然会调用 OnLaunched 方法的,在 OnLaunched 方法调用之后,会马上发生 Suspending 事件,随后应用就会暂停. 我先基于develop主分支拉出一个 ...

  4. GIL全局解释锁

    目录 一 介绍 二 GIL介绍 三 GIL与多线程 四 多线程性能测试 一 介绍 ''' 定义: In CPython, the global interpreter lock, or GIL, is ...

  5. 并发、并行、同步、异步、全局解释锁GIL、同步锁Lock、死锁、递归锁、同步对象/条件、信号量、队列、生产者消费者、多进程模块、进程的调用、Process类、

    并发:是指系统具有处理多个任务/动作的能力. 并行:是指系统具有同时处理多个任务/动作的能力. 并行是并发的子集. 同步:当进程执行到一个IO(等待外部数据)的时候. 异步:当进程执行到一个IO不等到 ...

  6. GIL全局解释器锁、死锁、递归锁、线程队列

    目录 GIL全局解释锁 多线程的作用 测试计算密集型 IO密集型 死锁现象 递归锁 信号量(了解) 线程队列 GIL全局解释锁 GIL本质上是一个互斥锁. GIL是为了阻止同一个进程内多个进程同时执行 ...

  7. 什么是python的全局解释锁(GIL)

    GIL解决了Python中的什么问题? 为什么选取GIL作为解决方案? 对多线程Python程序的影响 为什么GIL还没有被删除? 为什么在Python 3 中GIL没有被移除? 如何处理Python ...

  8. 全局解释锁GIL

    ''' 定义: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native th ...

  9. Python自动化 【第九篇】:Python基础-线程、进程及python GIL全局解释器锁

    本节内容: 进程与线程区别 线程 a)  语法 b)  join c)  线程锁之Lock\Rlock\信号量 d)  将线程变为守护进程 e)  Event事件 f)   queue队列 g)  生 ...

随机推荐

  1. TThread.Queue和TThread.Synchronize的区别

    TThread.Queue和TThread.Synchronize的区别 效果上:二者的作用都是让业务代码在主线程中执行,差别: Synchronize是阻塞,Queue是非阻塞 代码上 两个方法最终 ...

  2. chrome离线安装包下载

    Google Chrome 已经是许多人的默认浏览器,但由于“你懂的”原因,在线安装基本没有成功过,他自己的自动更新也多数一直在加载中,所以我们会到一些下载站下载安装包,但我的多次经历告诉我,下载回来 ...

  3. Python中if __name__ == '__main__':的作用和原理

    if __name__ == '__main__':的作用 一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行. ...

  4. cache-control: max-age=1,s-maxage=1

    cache-control: max-age=1,s-maxage=1

  5. excel : 如何快速跳到某一行

    在表格的上方,公式栏的左侧,即“名称框”输入单元格行列符号,如A1,B2,等 回车即可

  6. 005 文档API

    1.索引API 下面的请求把JSON对象添加到school索引,_doc映射下. 关于POST请求,如果存在索引,则更新:如果不存在,则添加. POST school/_doc/1 { "n ...

  7. Could not attach to pid : "xx"最近启动Xcode运行项目都会出现这个问题,再次启动或者多启动几次,就可以正常运行工程了。

    最近启动Xcode运行项目都会出现这个问题,再次启动或者多启动几次,就可以正常运行工程了. 普及一下:PID(进程控制符)英文全称为Process Identifier,它也属于电工电子类技术术语. ...

  8. Nessus更新到8.5.0

    Nessus更新到8.5.0   此次更新,主要涉及以下变化: (1)Nessus的用户注册和激活流程进行简化.用户可以在Nessus软件中直接进行注册和激活. (2)Nessus报告生成功能得到加强 ...

  9. [转]Windows系统下批量重命名文件(bat命令版本)

    原文地址:https://jingyan.baidu.com/article/6dad507524bdcba122e36e44.html 我们有时候会遇到大量文件需要重命名,Windows系统下右键菜 ...

  10. 小D课堂 - 零基础入门SpringBoot2.X到实战_第5节 SpringBoot部署war项目到tomcat9和启动原理讲解_22、SpringBoot启动方式和部署war项目到tomcat9

    笔记 1.SpringBoot启动方式讲解和部署war项目到tomcat9 简介:SpringBoot常见启动方式讲解和部署war项目Tomcat 1.ide启动     2.jar包方式启动    ...