针对Cpython所拥有的GIL锁作用:由于Cpython解释器在运行python文件时,     Cpython进程与其运行文件所产生的主进程是一个进程(文件进程相当于Cpython的一个线程)     线程的特点是数据资源是共享的,而多个线程又都要共享Cpython的解释权限,共享意味着竞争,有竞争数据就不安全,     所以Cpython的GIL锁(Cpython的一个线程)     就产生了,根本作用是,当python文件中的线程想要执行其代码,必须获得GIL权限,否则不能执行,     所以cpu的多核优势也没有了,除非多开Cpython解释器或多进程,否则同时只能运行一个线程

互斥锁作用:    互斥锁用于python文件运行进程(线程)时,使数据修改等操作的竞争变得有序化

程序运行过程分析
1、暂定开一个python进程,内有2个线程Thread-1,Thread-2,共享数据num
2、Thread-1要运行其代码改num,GIL获得,Thread-1可以改,Thread-1获得Lock
3、Thread-1代码在改num前先执行time.sleep(I/O啥的,就是没运行到改num)
4、这时Thread-2要运行其代码去修改num,由于Thread-1是阻塞状态,Thread-2获得GIL
5、由于Thread-1有Lock,所以Thread-2无法更改num
6、这时Thread-1又抢到GIL,由于其保留Lock所以其可以继续运行代码使其修改num
7、当Thread-1执行完释放lock后,Thread-2在获得GIL与Lock后才可对num进行修改


转载于:https://www.cnblogs.com/kevincaptain/p/10445120.html

GIL(全局解释器锁)与互斥锁相关推荐

  1. gil php,网络编程之多线程——GIL全局解释器锁

    网络编程之多线程--GIL全局解释器锁 一.引子 定义: In CPython, the global interpreter lock, or GIL, is a mutex that preven ...

  2. python基础--GIL全局解释器锁、Event事件、信号量、死锁、递归锁

    ps:python解释器有很多种,最常见的就是C python解释器 GIL全局解释器锁: GIL本质上是一把互斥锁:将并发变成串行,牺牲效率保证了数据的安全 用来阻止同一个进程下的多个线程的同时执行 ...

  3. 并发服务器的信号传递,使服务器支持并发、GIL全局解释器锁、死锁和Rlock、信号量、event事件、...

    服务器的并发实现: 服务端: importsocketfrom threading importThread"""服务端 1.要有固定的IP和PORT 2.24小时不间断 ...

  4. python gil锁存在的意义_关于python的GIL全局解释器锁的简单理解

    GIL是解释器内部的一把锁,确切一点说是CPython解释器内部的一把锁,所以要注意区分 这和我们在Python代码中使用线程锁Lock并不是一个层面的概念. 1. GIL产生的背景: 在CPytho ...

  5. 4,GIL全局解释器锁,event事件,信号量

    今日内容 1,GIL全局解释器锁 2,死锁 3,信号量 4,event事件 5,队列一:GIL全局解释器锁 什么是GIL 全局解释器锁: 它的本质也是一把互斥锁,是在CPython解释器锁,将并发变为 ...

  6. Python GIL全局解释器锁

    目录 GIL全局解释器锁 一.引入: 二.GIL介绍 三.GIL与Lock 四.GIL与多线程 总结 GIL全局解释器锁 一.引入: 首先要明白,GIL并不是Python的一个特性,其实在我们通常所称 ...

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

    1. GIL全称Global Interpreter Lock,每个线程在执行的过程都需要先获取GIL,保证同一时刻只有一个线程可以执行代码. 2.GIL的缺点 GIL使Python不能充分利用多核心 ...

  8. 【Python爬虫学习笔记11】Queue线程安全队列和GIL全局解释器锁

    Queue线程安全队列 在Python多线程编程中,虽然threading模块为我们提供了Lock类和Condition类借助锁机制来处理线程并发执行,但在实际开发中使用加锁和释放锁仍是一个经常性的且 ...

  9. Python高级——GIL全局解释器锁问题

    GIL全局解释器锁 GIL全局解释器锁是cpython解释器内部的一把锁,和python中的lock锁不是一个层面. GIL产生的背景:在cpython解释内部运行多个线程的时候,每个线程都需要解释器 ...

  10. python gil 解除_详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案

    先看一道GIL面试题: 描述Python GIL的概念, 以及它对python多线程的影响?编写一个多线程抓取网页的程序,并阐明多线程抓取程序是否可比单线程性能有提升,并解释原因. GIL:又叫全局解 ...

最新文章

  1. Object类Objects类总结
  2. 跟着迪哥学python 经管之家_跟着迪哥学Python数据分析与机器学习实战
  3. linux脚本实现红绿灯,javascript 如何实现红绿灯效果呢?
  4. sql 同一字段合并
  5. android外部sd卡,Android 操作外部SD卡问题
  6. Linux 2.6.39-rc3的一个插曲
  7. python如何爬虫股票数据_自学python之爬虫3股票数据爬虫
  8. 第F题 真约束之和(通解)古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为:  1+2+4+5+10+11+20+22+44+55+110=284
  9. 阿里云专家带你揭秘云计算数据底座——对象存储
  10. SpringMvc源码入门
  11. 对apache中并发控制参数prefork理解和调优
  12. android手机怎么改字体,安卓字体怎么修改 安卓手机字体替换教程
  13. 【Numpy】numpy.kron 用法详解
  14. 方维o2o系统多通道支付的实现
  15. KingbaseES R6 集群手工配置VIP案例
  16. 安卓腾讯Bugly使用教程
  17. 达人评测 Redmi G 2021锐龙版怎么样
  18. 获取微信公众号二维码接口
  19. 华为路由器ospf路由表解读_华为路由如何建立OSPF网络详解
  20. firefox控制台打开方法

热门文章

  1. WPF里ItemsControl的分组实现
  2. [2018.3.30集训]path-对偶图-最小割
  3. Fastboot和Recovery
  4. 关于js封装函数的一些东西
  5. 一些非常实用的JSON 教程
  6. AX 2009 时间类型函数操作
  7. C# 中的委托和事件(转载)
  8. python中 __name__及__main()__的妙处02
  9. 理解PeopleSoft集成代理(Integration Broker)-第1部分
  10. LeetCode Reverse Linked List II 反置链表2