GIL(全局解释器锁)与互斥锁
针对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(全局解释器锁)与互斥锁相关推荐
- gil php,网络编程之多线程——GIL全局解释器锁
网络编程之多线程--GIL全局解释器锁 一.引子 定义: In CPython, the global interpreter lock, or GIL, is a mutex that preven ...
- python基础--GIL全局解释器锁、Event事件、信号量、死锁、递归锁
ps:python解释器有很多种,最常见的就是C python解释器 GIL全局解释器锁: GIL本质上是一把互斥锁:将并发变成串行,牺牲效率保证了数据的安全 用来阻止同一个进程下的多个线程的同时执行 ...
- 并发服务器的信号传递,使服务器支持并发、GIL全局解释器锁、死锁和Rlock、信号量、event事件、...
服务器的并发实现: 服务端: importsocketfrom threading importThread"""服务端 1.要有固定的IP和PORT 2.24小时不间断 ...
- python gil锁存在的意义_关于python的GIL全局解释器锁的简单理解
GIL是解释器内部的一把锁,确切一点说是CPython解释器内部的一把锁,所以要注意区分 这和我们在Python代码中使用线程锁Lock并不是一个层面的概念. 1. GIL产生的背景: 在CPytho ...
- 4,GIL全局解释器锁,event事件,信号量
今日内容 1,GIL全局解释器锁 2,死锁 3,信号量 4,event事件 5,队列一:GIL全局解释器锁 什么是GIL 全局解释器锁: 它的本质也是一把互斥锁,是在CPython解释器锁,将并发变为 ...
- Python GIL全局解释器锁
目录 GIL全局解释器锁 一.引入: 二.GIL介绍 三.GIL与Lock 四.GIL与多线程 总结 GIL全局解释器锁 一.引入: 首先要明白,GIL并不是Python的一个特性,其实在我们通常所称 ...
- Python中的GIL(全局解释器锁)
1. GIL全称Global Interpreter Lock,每个线程在执行的过程都需要先获取GIL,保证同一时刻只有一个线程可以执行代码. 2.GIL的缺点 GIL使Python不能充分利用多核心 ...
- 【Python爬虫学习笔记11】Queue线程安全队列和GIL全局解释器锁
Queue线程安全队列 在Python多线程编程中,虽然threading模块为我们提供了Lock类和Condition类借助锁机制来处理线程并发执行,但在实际开发中使用加锁和释放锁仍是一个经常性的且 ...
- Python高级——GIL全局解释器锁问题
GIL全局解释器锁 GIL全局解释器锁是cpython解释器内部的一把锁,和python中的lock锁不是一个层面. GIL产生的背景:在cpython解释内部运行多个线程的时候,每个线程都需要解释器 ...
- python gil 解除_详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
先看一道GIL面试题: 描述Python GIL的概念, 以及它对python多线程的影响?编写一个多线程抓取网页的程序,并阐明多线程抓取程序是否可比单线程性能有提升,并解释原因. GIL:又叫全局解 ...
最新文章
- Object类Objects类总结
- 跟着迪哥学python 经管之家_跟着迪哥学Python数据分析与机器学习实战
- linux脚本实现红绿灯,javascript 如何实现红绿灯效果呢?
- sql 同一字段合并
- android外部sd卡,Android 操作外部SD卡问题
- Linux 2.6.39-rc3的一个插曲
- python如何爬虫股票数据_自学python之爬虫3股票数据爬虫
- 第F题 真约束之和(通解)古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为: 1+2+4+5+10+11+20+22+44+55+110=284
- 阿里云专家带你揭秘云计算数据底座——对象存储
- SpringMvc源码入门
- 对apache中并发控制参数prefork理解和调优
- android手机怎么改字体,安卓字体怎么修改 安卓手机字体替换教程
- 【Numpy】numpy.kron 用法详解
- 方维o2o系统多通道支付的实现
- KingbaseES R6 集群手工配置VIP案例
- 安卓腾讯Bugly使用教程
- 达人评测 Redmi G 2021锐龙版怎么样
- 获取微信公众号二维码接口
- 华为路由器ospf路由表解读_华为路由如何建立OSPF网络详解
- firefox控制台打开方法
热门文章
- WPF里ItemsControl的分组实现
- [2018.3.30集训]path-对偶图-最小割
- Fastboot和Recovery
- 关于js封装函数的一些东西
- 一些非常实用的JSON 教程
- AX 2009 时间类型函数操作
- C# 中的委托和事件(转载)
- python中 __name__及__main()__的妙处02
- 理解PeopleSoft集成代理(Integration Broker)-第1部分
- LeetCode Reverse Linked List II 反置链表2