你们会用乐观锁来防止并发冲突吗

278 天前
ljzxloaf  ljzxloaf
并发冲突似乎是个大家都在谈,但是很少有人真的去当回事的东西。

典型的如 innodb 的 mvcc 就是用乐观锁的方式去处理并发冲突,你可以通过设置不同的隔离级别让 innodb 在检测到并发修改的时候选择不同的处理方式。

在业务开发中,当用户并发修改某条数据的时候,我们也可以通过类似的方式去防止或协调冲突。
那么问题来了,在实际工作你们真的去这么做了吗?如果没有这样实践的话是啥原因呢?就我个人的经验而言,好像很少有人真的这么干。
3595 次点击
所在节点   程序员  程序员
28 条回复
mshadow
mshadow
277 天前
18 楼说的是主要场景。其他高并发场景一般用分布式锁。
Huelse
Huelse
277 天前
postgresql 中我们就用乐观锁,因为 mvcc 的关系
hekkowoerld
hekkowoerld
277 天前
@helloluckydamon 大佬有对比过吗?性能大概有多大的提升?其实说白了乐观锁和悲观锁主要就是性能差异。
ZeawinL
ZeawinL
277 天前
看数据重要程度
laminux29
laminux29
277 天前
1.锁性能的关键在于 CPU 、主板、内存 的主频下限,这是个木桶效应问题。

2.业务量小的系统,不需要考虑这个问题,直接用数据库的序列化事务,来处理这类数据。

3.业务量大的系统,不靠数据库来处理,而是在系统的设计阶段,就会根据第一条的机器性能,把业务进行拆分,拆分到不同的业务集群里。举个例子,用户注册的用户名唯一性查询,会按照首字母 + 数据量,进行物理数据库服务器拆分,并且这类物理数据库服务器,会选用高频设备:高频 CPU + 高频主板 + 高频内存。
RightHand
RightHand
277 天前
哎,干了这么多年还没用过乐观锁。另外乐观锁这词又是哪里来的?
duhbbx1119
duhbbx1119
277 天前
之前用的比较多的是版本控制,数据库中加个字段记录版本,update 的时候比较下
byehair
byehair
274 天前
@hekkowoerld 并没有实际对比过,没有实际对比主要是两点原因:
1. 懒
2. 乐观锁和悲观锁的性能差异在不同条件下是不一样的,要看自旋的成本和调度的成本

假设你获取到锁的线程执行任务周期长,或者锁竞争很激烈,那么也许悲观锁性能更高
反之亦然

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1058045

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX