V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yodhcn
V2EX  ›  数据库

为什么要用乐观锁?什么场景下乐观锁比悲观锁有优势?

  •  
  •   yodhcn · 2023-10-25 17:46:43 +08:00 · 1057 次点击
    这是一个创建于 395 天前的主题,其中的信息可能已经有所发展或是发生改变。
    乐观锁能实现的,悲观锁都能实现。
    而且,通过 [设置锁的颗粒度] 、 [读写锁] 等方式优化,也能解决悲观锁并发受限制的问题。
    那为什么要用乐观锁呢?


    比如,这篇博客中举的 [在线文档] 的例子,
    https://xiaolincoding.com/os/4_process/pessim_and_optimi_lock.html#乐观锁与悲观锁
    这里举一个场景例子:在线文档。

    我们都知道在线文档可以同时多人编辑的,如果使用了悲观锁,那么只要有一个用户正在编辑文档,此时其他用户就无法打开相同的文档了,这用户体验当然不好了。

    那实现多人同时编辑,实际上是用了乐观锁,它允许多个用户打开同一个文档进行编辑,编辑完提交之后才验证修改的内容是否有冲突。


    [疑问]
    像 MySQL 那样用行级别的锁(或者更小的粒度,一个单元格一把锁),不是和使用 [乐观锁] 的效果一样,都能支持 [多用户并发写入] 吗?

    一个用户写入单元格,另一个用户不能读的问题,不是也可以通过 [读写锁] 的方式来解决吗?

    那么为什么这个场景用乐观锁?
    我能想到的解释只有:因为用颗粒度小的悲观锁,需要锁监视器监视大量的锁,导致使用悲观锁的成本太高?
    还有其它的解释吗?
    5 条回复    2023-10-26 11:35:31 +08:00
    Rang666
        1
    Rang666  
       2023-10-25 18:13:14 +08:00 via iPhone
    以我不是很专业的理解,对一个一个单元格建立对象不太现实
    mcfog
        2
    mcfog  
       2023-10-26 09:39:41 +08:00 via Android
    有没有一种可能,乐观锁就是用悲观锁实现的?
    hangszhang
        3
    hangszhang  
       2023-10-26 09:54:34 +08:00
    @mcfog 哈哈哈哈哈
    YuuuuuuH
        4
    YuuuuuuH  
       2023-10-26 10:40:59 +08:00
    @mcfog 哈?
    SixGodHave7
        5
    SixGodHave7  
       2023-10-26 11:35:31 +08:00
    @mcfog 无数个细分的悲观成就乐观?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   978 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:15 · PVG 04:15 · LAX 12:15 · JFK 15:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.