一、序
在本月的面试中,面试官就问到了:在秒杀系统中,为什么可以使用乐观锁解决超卖问题而不能使用悲观锁呢?
二、锁
- 数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。
- 乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。
三、悲观锁(悲观并发控制)
- 悲观锁(Pessimistic Concurrency Control,缩写”PCC”),顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程,和Python中GIL锁一样)
- 悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。
- 悲观锁:主要用于数据争用激烈的环境,以及发生并发冲突时使用锁保护数据的成本要低于回滚事务的成本的环境中。
四、乐观锁(乐观并发控制)
- 乐观锁(Optimistic Concurrency Control,缩写”OCC”),顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修