zoukankan      html  css  js  c++  java
  • python--各种锁机制归纳整理

     

    Q:为什么要用锁?什么样的业务场景下需要用锁?

    就拿之前的工单系统来说,当审批方式为角色组审批时,代表该角色组内任意一人审批即可,这时,该角色组内成员的系统上都是可以显示审批按钮,如果此时A审批员和B审批员都同时审批了同一工单,有可能会出现不一样的审批结果,即使审批意见是一致的,多人操作也会增加对数据库的操作次数,同时也消耗了很大时间成本,用了锁机制,确保这部分是只一人在操作。

    Q:你知道MySQL有哪些锁?

    悲观锁、乐观锁            排它锁、共享锁                 行级锁、表级锁

    悲观锁:对每次访问数据库的操作都是抱有悲观的态度,认为该操作会对数据库做出修改,所以在访问数据库的时候就加了锁

    乐观锁:对每次访问数据库的操作都抱有乐观的态度,只有在做出修改的时候才会上锁

    排它锁:也称为写锁,若事务A对数据A上了写锁,那么此时只允许事务A对数据A进行读和写的操作,不允许数据A再接受其他的锁,直到排它锁释放之后

    共享锁:也称为读锁,若事务A对数据A上了读锁,那么此时事务A只能读取数据A并不能对其修改,也能接受其他事务对数据A的读锁

    mysql数据库引擎:MyISAM 和 InnoDB

    MyISAM 采用表级锁,不支持事务

    InnoDB 默认行级锁,也支持表级锁

    行级锁:如根据主键id字段进行查找,并且查找到数据,主键字段就产生了行级锁

    表级锁:根据非主键非索引字段进行查找,并且查找到数据,当前查找字段产生表级锁

    GIL全局解释器锁:GIL相当于互斥锁,在解释器层面上限制多线程同时执行,避免争抢资源,保证同一时间只有一个线程在执行

    Q:有了GIL全局解释器锁,为什么还要线程锁?

    因为cpu是分时分片的  当该协程指定时间内未完成任务时 需要用到线程锁 

  • 相关阅读:
    codeforces C. No to Palindromes!
    codeforces D. Pashmak and Parmida's problem
    codeforces C. Little Pony and Expected Maximum
    codeforces D. Count Good Substrings
    codeforces C. Jzzhu and Chocolate
    codeforces C. DZY Loves Sequences
    codeforces D. Multiplication Table
    codeforces C. Painting Fence
    hdu 5067 Harry And Dig Machine
    POJ 1159 Palindrome
  • 原文地址:https://www.cnblogs.com/guofeng-1016/p/11323565.html
Copyright © 2011-2022 走看看