码上敲享录 > mysql面试题 > 悲观锁与乐观锁

悲观锁与乐观锁

上一章章节目录下一章 2023-07-17已有223人阅读 评论(0)

悲观锁(Pessimistic Locking)和乐观锁(Optimistic Locking)是并发控制中的两种不同的策略。


悲观锁:

- 描述:悲观锁是一种保守的策略,认为并发访问中会发生冲突,因此在操作数据之前会先获取锁来阻止其他事务访问或修改数据。

- 特点:

 - 在访问共享资源之前,先获取锁来保护资源,阻止其他事务进行写操作或读取操作(根据具体情况而定)。

 - 悲观锁的机制一般包括行级锁或表级锁的使用,例如通过数据库的锁机制(如MySQL的行级锁)来实现。

 - 悲观锁会造成并发性能下降,因为需要等待锁的释放,可能导致事务阻塞。

 - 适用于并发冲突可能较高的场景,对数据的一致性要求较高,例如并发更新同一数据的情况。


乐观锁:

- 描述:乐观锁是一种乐观的策略,认为并发访问中冲突的概率较低,因此允许多个事务同时访问或修改数据,但在提交之前会检查数据是否被修改。

- 特点:

 - 在事务提交之前,会比较数据的变化情况,如果没有发生变化,则允许提交,否则会中止操作,提示发生冲突。

 - 乐观锁的机制一般是通过记录版本号(或时间戳)来实现,每个事务读取数据时都会记录当前版本号,提交操作时再进行比较。

 - 乐观锁不会造成事务阻塞,但可能需要处理冲突的情况,例如通过重试或回滚来解决冲突。

 - 适用于并发冲突较低的场景,对数据的一致性要求较低,例如读多写少的情况。


悲观锁和乐观锁是基于不同的假设和策略来处理并发访问中的冲突。悲观锁采取保守的策略,在访问共享资源之前先获取锁来阻止其他事务访问或修改数据;乐观锁则采取乐观的策略,允许多个事务并发访问数据,但在提交之前会检查数据是否被修改。选择悲观锁还是乐观锁取决于具体的应用场景和需求,需要综合考虑并发冲突概率、数据一致性要求和性能等因素。


向大家推荐《Activiti工作流实战教程》:https://xiaozhuanlan.com/activiti
0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交