mysql锁

mysql锁:
MyISAM和MEMORY存储引擎采用的是表级锁,
BDB存储引擎采用的是页面锁但也支持表级锁;
InnoDB存储引擎既支持行级锁,也支持表级锁,但默认情况下是采用行级锁。
表级锁: 开销小,枷锁快,不会出现死锁,锁定 粒度大,发生锁冲突概率最高,并发度最低
行级锁:开销大,枷锁慢,不会出现死锁,锁定粒度小,发生锁冲突概率最低,并发最高
页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般
死锁:指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等竺的进程称为死锁进程.表级锁不会产生死锁.所以解决死锁主要还是针对于最常用的InnoDB.
死锁的关键在于:两个(或以上)的Session加锁的顺序不一致。

GIL(全局解释器锁):在同一个进程中只要有一个线程获取了全局解释器(cpu)的使用权限,那么其他的线程就必须等待该线程的全局解释器(cpu)使用权消失后才能使用全局解释器(cpu),即时多个线程之间不会相互影响在同一个进程下也只有一个线程使用cpu,这样的机制称为全局解释器锁(GIL)。
优点:避免了大量加锁解锁的过程
保证了数据安全,解决多线程间的数据完整性和状态同步
缺点:多核处理变为蛋壳处理,只能并发不能并行

同步锁:在同一时刻的一个进程下的一个线程只能使用一个cpu,要确保这个线程下的程序在一段时间内被cpu执,那么就要用到同步锁.

#创建锁对象
t = threading.Lock()
#获得锁
t.acquire()
#解锁
t.release()

使用同步锁的原因是因为有可能当一个线程在使用cpu时,该线程下的程序可能会遇到io操作,那么cpu就会切到别的线程上去,这样就有可能会影响到该程序结果的完整性。

GIL的作用:多线程情况下必须存在资源的竞争,GIL是为了保证在解释器级别的线程唯一使用共享资源(cpu
同步锁的作用:为了保证解释器级别下的自己编写的程序唯一使用共享资源产生了同步锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值