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常用的加锁方式?

互斥锁、可重入锁、迭代死锁、互相调用死锁、自选锁。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 必备的理论基础 1.操作系统作用: 隐藏丑陋复杂的硬件接口,提供良好的抽象接口。 管理调度进程,并将多个进程对硬件...
    drfung阅读 3,579评论 0 5
  • 线程 操作系统线程理论 线程概念的引入背景 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有...
    go以恒阅读 1,676评论 0 6
  • 转一篇关于Python GIL的文章。归纳一下,CPU的大规模电路设计基本已经到了物理意义的尽头,所有厂商们都开始...
    SeanCheney阅读 11,148评论 0 12
  • 引言 从刚开始学习Python爬虫的时候,就一直惦记着多线程这个东西,想想每次下载图片都是单线程,一个下完继续下一...
    coder_pig阅读 920评论 0 7
  • 简友是一款社交娱乐+购物+赚钱攻略的APP,给大家分析一下这款APP的组成 社交娱乐:采用和 douyin 一样的...
    简友_伴随你的每一刻阅读 210评论 0 0