首页 > 代码库 > 乐观锁与悲观锁的简单区分

乐观锁与悲观锁的简单区分

1、锁的出现,是因为并发读写同一个数据的时候,需要进行数据完备性的保护,避免脏读、脏写等。

2、乐观锁,需要在事务中加锁,在读取数据的时候,不必在意数据是否已经被修改了(即允许脏读);但是在写入数据的时候,要检查数据是否已经被修改了(可以通过版本号等机制控制),如果被修改那么就通知事务调用者,事务失败了。

3、悲观锁,需要在事务中加锁,在读取写入数据的时候,都需要考虑数据是否已经被修改,如果被修改了,那么就通知事务调用者,事务被阻塞了,进入等待状态。

4、从性能上看,乐观锁性能会高一些,因为悲观锁要检查更多的数据变动情况,而且还会存在阻塞。

5、从使用场景上看,悲观锁一般用于要求很强的数据一致性的系统,读写都不允许“脏”,乐观锁一般用于一致性稍弱的系统,不允许脏写,但是允许脏读。

 

概念引申:数据库的各种锁,分布式系统的CAP原则。

乐观锁与悲观锁的简单区分