什么是锁?
锁是计算机协调多个进程或线程并发访问某一资源的机制。
锁的分类
-
从数据操作的类型分为:读锁、写锁
1)读锁(共享锁):针对同一份数据,多个度操作可以同时进行而不互相影响。
2)写锁(排它锁):当前写操作没有完成前,它会阻断其他写锁和读锁。 -
从对数据操作的粒度分为:表锁、行锁、页锁,前两种是企业里面用的最多的,重点介绍。而介于表锁和行锁之间,知道即可。
1)表锁(偏读):- 特点:偏向MyISAM存储引擎,开销小,加锁快;无死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
2)行锁(偏写)
- 特点:偏向MyISAM存储引擎,开销小,加锁快;无死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
额外说明:
- 在MySQL里,表锁不会有死锁发生,因为再加表锁前,要先解锁已有的表锁。
- 表锁时,会锁定表以及表里所有数据,对该表的任何请求(尤其是写请求)几乎都可能会被阻塞,所以说冲突更多。
- 死锁是两个或多个事务/请求之间的锁产生了回路,也就是死循环了,其中一个循环不主动放弃解开的话,就永远解不开。而锁冲突则是有个session持有了某个资源(比如id=1的数据)的写锁,另一个seession正好也要请求同一条数据的写锁,就必须被阻塞,直到前面的session释放锁为止,我一般称之为”锁死“或”长时间锁等待“。








网友评论