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是分时分片的 当该协程指定时间内未完成任务时 需要用到线程锁
python--各种锁机制归纳整理的更多相关文章
- python 多线程锁机制
GIL(全局解释器锁) GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念,是为了实现不同线程对共享资源访问的互斥,才引入了GIL 在Cpython解释器 ...
- “死锁” 与 python多线程之threading模块下的锁机制
一:死锁 在死锁之前需要先了解的概念是“可抢占资源”与“不可抢占资源”[此处的资源可以是硬件设备也可以是一组信息],因为死锁是与不可抢占资源有关的. 可抢占资源:可以从拥有他的进程中抢占而不会发生副作 ...
- Python并发编程之谈谈线程中的“锁机制”(三)
大家好,并发编程 进入第三篇. 今天我们来讲讲,线程里的锁机制. 本文目录 何为Lock( 锁 )?如何使用Lock( 锁 )?为何要使用锁?可重入锁(RLock)防止死锁的加锁机制饱受争议的GIL( ...
- python基础之多线程锁机制
GIL(全局解释器锁) GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念,是为了实现不同线程对共享资源访问的互斥,才引入了GIL 在Cpython解释器 ...
- Python开发基础-Day30多线程锁机制
GIL(全局解释器锁) GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念,是为了实现不同线程对共享资源访问的互斥,才引入了GIL 在Cpython解释器 ...
- 归纳整理Python中的控制流语句的知识点
归纳整理Python中的控制流语句的知识点 Python 解释器在其最简单的级别,以类似的方式操作,即从程序的顶端开始,然后一行一行地顺序执行程序语句.例如,清单 1 展示了几个简单的语句.当把它们键 ...
- 【转载整理】Hibernater的锁机制
转载原文:http://www.cnblogs.com/otomedaybreak/archive/2012/01/27/2330008.html 概要:数据库事务,事务并发,hibernate悲观锁 ...
- 【转载并整理】ORACLE锁机制
转载文章:http://blog.csdn.net/liuyiy/article/details/25005393 转载文章:http://www.cnblogs.com/jiyuqi/p/37017 ...
- MySQL- 锁机制及MyISAM表锁
锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许 多用户 共享的资源.如何保证数据并发访问的一致性.有效性是所 ...
随机推荐
- mysql创建用户后无法进入
说明 在mysql中添加用户: #mysql -u root -p >use mysql: >update user set password="" where use ...
- webpack-dev-server config.js Cannot find module
Error: Cannot find module,webpack-dev-server --config 报错找不到模块 webpack-dev-server 设置 webpack.config.j ...
- Zstack的安装部署
ZStack是下一代开源的云计算IaaS(基础架构即服务)软件. 它主要面向的是未来的智能数据中心,通过提供全完善的API来管理包括计算.存储和网络在内的数据中心的各种资源.跟OpenStack相比, ...
- OOAD 面向对象的分析与设计
OOAD 面向对象的分析与设计 OOA-----分析阶段(针对业务问题清晰视图, 列出系统完成任务, 整理业务的公共词汇, 列出解决业务的解决方法) O ...
- 《Web Development with Go》Mangodb查询collection内所有记录
相当于select * from table; package main import ( "fmt" "log" "time" " ...
- Python常用的正则表达式处理函数
Python常用的正则表达式处理函数 正则表达式是一个特殊的字符序列,用于简洁表达一组字符串特征,检查一个字符串是否与某种模式匹配,使用起来十分方便. 在Python中,我们通过调用re库来使用re模 ...
- java之JavaBean
JavaBean是一种java语言编写而成的可重用组件. 所谓JavaBean,是指符合以下标准的java类: 类是公共的: 有一个无参的公共构造器: 有属性,属性一般是私有的,且有对应的set.ge ...
- Laravel-权限系统
总结Auth中间件用于定义未登录用户只能操作哪些权限policy授权策略定义了当前用户实例与进行授权的用户是否匹配,一致才能进一步操作,否则返回403禁止访问异常场景:用户登录 Auth步骤 找到需要 ...
- Mysql的旧版本下载地址
直接进入:http://downloads.mysql.com/archives/community/
- Web安全测试学习笔记-SQL注入-利用concat和updatexml函数
mysql数据库中有两个函数:concat和updatexml,在sql注入时经常组合使用,本文通过学习concat和updatexml函数的使用方法,结合实例来理解这种sql注入方式的原理. con ...