Python中的各种锁:
一、全局解释器锁(GIL)
1、什么是全局解释器锁
每个CPU在同一时间只能执行一个线程,那么其他的线程就必须等待该线程的全局解释器,使用权消失后才能使用全局解释器,即使多个线程直接不会相互影响在同一个进程下也只有一个线程使用cpu,这样的机制称为全局解释器锁(GIL)。GIL的设计简化了CPython的实现,使的对象模型包括关键的内建类型,如:字典等,都是隐含的,可以并发访问的,锁住全局解释器使得比较容易的实现对多线程的支持,但也损失了多处理器主机的并行计算能力。
2、全局解释器锁的好处
1)、避免了大量的加锁解锁的好处
2)、使数据更加安全,解决多线程间的数据完整性和状态同步
3、全局解释器的缺点
多核处理器退化成单核处理器,只能并发不能并行。
4、GIL的作用:
多线程情况下必须存在资源的竞争,GIL是为了保证在解释器级别的线程唯一使用共享资源(cpu)。
二、同步锁
1、什么是同步锁?
同一时刻的一个进程下的一个线程只能使用一个cpu,要确保这个线程下的程序在一段时间内被cpu执,那么就要用到同步锁。
2、为什么用同步锁?
因为有可能当一个线程在使用cpu时,该线程下的程序可能会遇到io操作,那么cpu就会切到别的线程上去,这样就有可能会影响到该程 序结果的完整性。
3、怎么使用同步锁?
只需要在对公共数据的操作前后加上上锁和释放锁的操作即可。
4、同步锁的所用:
为了保证解释器级别下的自己编写的程序唯一使用共享资源产生了同步锁。
三、死锁
1、什么是死锁?
指两个或两个以上的线程或进程在执行程序的过程中,因争夺资源或者程序推进顺序不当而相互等待的一个现象。
2、死锁产生的必要条件?
互斥条件、请求和保持条件、不剥夺条件、环路等待条件
3、处理死锁的基本方法?
预防死锁、避免死锁(银行家算法)、检测死锁(资源分配)、解除死锁:剥夺资源、撤销进程
四、什么是递归锁?
在Python中为了支持同一个线程中多次请求同一资源,Python提供了可重入锁。这个RLock内部维护着一个Lock和一个counter变量,counter记录了acquire的次数,从而使得资源可以被多次require。直到一个线程所有的acquire都被release,其他的线程才能获得资源。递归锁分为可递归锁与非递归锁。
五、什么是乐观锁?
假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。
六、什么是悲观锁?
假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。
七、python常用的加锁方式?
互斥锁、可重入锁、迭代死锁、互相调用死锁、自旋锁。
Python中的各种锁:相关推荐
- c语言的锁和Python锁,Python中全局解释器锁、多线程和多进程
全局解释器锁(GIL)只允许1个Python线程控制Python解释器.这也就意味着同一时间点只能有1个Python线程运行.如果你的Python程序只有一个线程,那么全局解释器锁可能对你的影响不大, ...
- Python中的GIL锁
Python中的GIL锁 在Python中,可以通过多进程.多线程和多协程来实现多任务. 在多线程的实现过程中,为了避免出现资源竞争问题,可以使用互斥锁来使线程同步(按顺序)执行. 但是,其实Pyth ...
- python中gil锁和线程锁_浅谈Python中的全局锁(GIL)问题
CPU-bound(计算密集型) 和I/O bound(I/O密集型) 计算密集型任务(CPU-bound) 的特点是要进行大量的计算,占据着主要的任务,消耗CPU资源,一直处于满负荷状态.比如复杂的 ...
- 彻底弄懂Python中的GIL锁
彻底弄懂Python中的GIL锁 转载:https://blog.csdn.net/yushuaigee/article/details/86537474 刚学习python时,我关注了许多介绍pyt ...
- Python多任务(4.多线程--Python中的互斥锁和死锁)
互斥锁 1.互斥锁的概念 2.互斥锁的使用 3.使用互斥锁完成2个线程对同一全局变量各加100万次的操作,而不会出现问题 死锁 死锁的概念 避如何免死锁: 出现死锁的例子 互斥锁 1.互斥锁的概念 互 ...
- python中的互斥锁
如果没有控制多个线程对同一资源的访问,对数据造成破坏,使得线程运行的结果不可预期.这种现象称为"线程不安全". 线程同步解决问题: 系统调用t1,然后获取到num的值为0,此时上一 ...
- Python中的互斥锁和join的应用
一丧"人生大部分的时候,都挺无聊的" 先说互斥锁的作用:lock互斥锁实现防止全局变量的互相争抢 做一个不太形象的比喻,你买了一个杯子(进程),你想喝混合口味的果汁,但是要自己做( ...
- python锁_Python中四种锁的使用示例(代码)
本篇文章给大家带来的内容是关于Python中四种锁的使用示例(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. Lock互斥锁 使用前num = 0 def a(): globa ...
- PYTHON 中的多线程
通常我们构建的应用程序可能需要多个任务在同一个应用程序中同时运行.这就是python中多线程概念发挥作用的地方.这篇文章提供了在 Python 中使用多线程(又名 Python 中的线程)的全面解释. ...
最新文章
- matlab 条形图与面积图
- Rails字符集问题
- python百度地图api经纬度_从百度地图API接口批量获取地点的经纬度
- vue计算多列和_解决vue 表格table列求和的问题
- 基于深度学习的图像分割在高德的实践
- php运行的四个黄金组合,PHP168与Phpwind强势整合 打造黄金组合
- collapse用法
- collectors 求和_Java-Collectors常用的20个方法
- ojective-C学习笔记(6)复合
- HeadFirstJava——7_继承与多态
- PHP响应式营销型万能H5建站系统源码
- 第一章:【UCHome二次开发】uchome文件体系介绍
- mysql 统计新增用户_Mysql 查询:统计某月每日新增用户在新增当天的充值笔数、当天新增用户充值的总人数和充值总金额...
- 创新实训(11)——推荐系统实现之基于流行度和新鲜度的推荐
- DayDayUp:2019.01.24新东方年会—俞敏洪点赞并奖励吐槽神曲《释放自我》12万元!—附全歌词(牛逼的人在哪里都不会彷徨)
- 百度地图自定义覆盖物,在手机上无法监听click事件
- 计算机网络清单,网络系统材料清单
- 华为云服务器无数据盘也可以使用(数据盘非系统盘)
- python 列表操作模块_Python:使用模块laspy的列表理解问题
- Mdserver-web:一个开源、免费的 Linux 主机面板
热门文章
- 腾讯产品心法8分钟产品课分享
- 数据科学指南#基础篇 Matplotlib 入门
- ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.al
- Apriori算法及超市数据集挖掘实战
- 如何辨别一个程序员水平的高低?
- 【中文分词系列】 5. 基于语言模型的无监督分词
- mysql主从配置 GTID 主从配置
- hihocoder #1716 : 继承顺位
- 特征因子是什么意思_尺度因子是什么意思
- 微信小程序分账流程及功能