为什么要用乐观锁?什么场景下乐观锁比悲观锁有优势? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yodhcn
V2EX    数据库

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

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


    比如,这篇博客中举的 [在线文档] 的例子,
    https://xiaolincoding.com/os/4_prcess/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     Solana     5178 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 08:17 PVG 16:17 LAX 00:17 JFK 03:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86