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是分时分片的  当该协程指定时间内未完成任务时 需要用到线程锁

python--各种锁机制归纳整理的更多相关文章

  1. python 多线程锁机制

    GIL(全局解释器锁) GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念,是为了实现不同线程对共享资源访问的互斥,才引入了GIL 在Cpython解释器 ...

  2. “死锁” 与 python多线程之threading模块下的锁机制

    一:死锁 在死锁之前需要先了解的概念是“可抢占资源”与“不可抢占资源”[此处的资源可以是硬件设备也可以是一组信息],因为死锁是与不可抢占资源有关的. 可抢占资源:可以从拥有他的进程中抢占而不会发生副作 ...

  3. Python并发编程之谈谈线程中的“锁机制”(三)

    大家好,并发编程 进入第三篇. 今天我们来讲讲,线程里的锁机制. 本文目录 何为Lock( 锁 )?如何使用Lock( 锁 )?为何要使用锁?可重入锁(RLock)防止死锁的加锁机制饱受争议的GIL( ...

  4. python基础之多线程锁机制

    GIL(全局解释器锁) GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念,是为了实现不同线程对共享资源访问的互斥,才引入了GIL 在Cpython解释器 ...

  5. Python开发基础-Day30多线程锁机制

    GIL(全局解释器锁) GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念,是为了实现不同线程对共享资源访问的互斥,才引入了GIL 在Cpython解释器 ...

  6. 归纳整理Python中的控制流语句的知识点

    归纳整理Python中的控制流语句的知识点 Python 解释器在其最简单的级别,以类似的方式操作,即从程序的顶端开始,然后一行一行地顺序执行程序语句.例如,清单 1 展示了几个简单的语句.当把它们键 ...

  7. 【转载整理】Hibernater的锁机制

    转载原文:http://www.cnblogs.com/otomedaybreak/archive/2012/01/27/2330008.html 概要:数据库事务,事务并发,hibernate悲观锁 ...

  8. 【转载并整理】ORACLE锁机制

    转载文章:http://blog.csdn.net/liuyiy/article/details/25005393 转载文章:http://www.cnblogs.com/jiyuqi/p/37017 ...

  9. MySQL- 锁机制及MyISAM表锁

    锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许 多用户 共享的资源.如何保证数据并发访问的一致性.有效性是所 ...

随机推荐

  1. 分析Android APK- smali 语言简介

    2.1 smali 语言简介 1.smali apk文件通过apktool反编译出来的都有一个smali文件夹,里面都是以.smali结尾的文件. smali语言是Davlik的寄存器语言,语法上和汇 ...

  2. MySQL数据库文件的移动和权限设置

    新型数据库层出不穷,MySQL一幅日薄西山的样子.其实还有很多人或者偏爱.或者使用以前遗留的系统,仍然生活在MySQL的世界. 我也是有很久不用了,这个很久超过十年. 不过前几天有个朋友让我帮忙为他们 ...

  3. ubuntu vscode 写一个C++程序

    博客转载:https://blog.csdn.net/weixin_43374723/article/details/84064644 Visual studio code是微软发布的一个运行于 Ma ...

  4. 【oracle】PLS-00103: 出现符号 "end-of-file"

    begin xxxxx end; 修改xxxxx为xxxxx:就好了

  5. SpringBootJPA实现增删改查

    一.目录展示 二.导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifac ...

  6. Xcode 中配置 clang-format 格式化 C++ 代码

    Xcode 自带的代码格式化功能(control + I)很有限,其 "格式化" 仅限于设置缩进,代码里面的格式是不会处理的.所以需要借助额外的工具来完成代码的美化. clang- ...

  7. ASP.NET Core 2.2 WebApi 系列【六】泛型仓储模式

    为什么要使用泛型仓储?好处是? 前两章在autofac注入的时候,用的User类作为例子,写了增删改查四个接口,也就是仓储的GRUD. 当我们再添加一个实体(比如Student)时,StudentRe ...

  8. git push 时用户的配置

    Pycharm临时配置git提交的账户:git 修改当前的project的用户名的命令为:git config user.name 你的目标用户名**;git 修改当前的project提交邮箱的命令为 ...

  9. Web前端基础(18):jQuery基础(五)

    1. 事件 前面我们介绍完js的事件流的概念之后,相信大家对事件流也有所了解了.那么接下来我们看一下jquery的事件操作. 在说jquery的每个事件之前,我们先来看一下事件对象 . 1.1 事件对 ...

  10. Scrapy中response属性以及内容提取

    一.属性 url :HTTP响应的url地址,str类型 status:HTTP响应的状态码, int类型 headers :HTTP响应的头部, 类字典类型, 可以调用get或者getlist方法对 ...