程序员过关斩将——数据库的乐观锁和悲观锁并非真实的锁( 九 )

悲观锁

每次获取数据的时候 , 都会担心数据被修改 , 所以每次获取数据的时候都会进行加锁 , 确保在自己使用的过程中数据不会被别人修改 , 使用完成后进行数据解锁 。 由于数据进行加锁 , 期间对该数据进行读写的其他线程都会进行等待 。

总结

无论是乐观锁和悲观锁 , 并非是数据库自身持有的锁类型(虽然悲观锁形式上很像独占锁) , 而是程序设计的一种思想 , 是一种类似数据库锁机制保护数据一致性的策略 。

1. 悲观锁比较适合写入操作比较频繁的场景 , 如果出现大量的读取操作 , 每次读取的时候都会进行加锁 , 这样会增加大量的锁的开销 , 降低了系统的吞吐量 。

2. 乐观锁比较适合读取操作比较频繁的场景 , 如果出现大量的写入操作 , 数据发生冲突的可能性就会增大 , 为了保证数据的一致性 , 应用层需要不断的重新获取数据 , 这样会增加大量的查询操作 , 降低了系统的吞吐量 。

推荐阅读