V3.01.2Granularity trade-off in merge and locking设计研究

字符级合并与块级锁定各有代价

别名: 合并粒度 · 锁粒度 · 细粒度合并与粗粒度锁

概念解释

处理并发编辑的两条主流路线,本质是粒度的取舍。字符级合并(以操作变换、无冲突复制数据类型为代表)以极细的粒度融合并发修改:两人同时打字互不阻挡,系统在字符层面把操作交织起来。块级锁定走另一个极端:一段、一格、一个对象在某一时刻只归一人编辑,其他人等。前者买到了几乎不受限的并行度,代价是把「合出来的是什么」交给了算法;后者买到了语义的完整,代价是并行被串行化。两条路线不是先进与落后,而是代价结构不同的两种商品。

机制

粒度决定两件事的概率。第一是碰撞概率:合并单元越细,两个编辑落在「同一单元」里的概率越低——两人同时在一段里打字,字符级判定下绝大多数修改互不相干,可以直接融合;块级判定下则整段互斥。第二是融合质量:合并单元越细,自动融合越可能产生语法上成立、语义上荒谬的结果——两人各改了半句话,字符级合并会拼出一句谁都没写过的话,收敛了,但不是任何人想要的。锁定把这个问题从根上消灭:既然同一时刻只有一人能写,就不存在融合,只剩等待。于是代价曲线交叉:合并的代价随语义敏感度上升(散文宽容、代码与公式残酷),锁的代价随区域大小与持有时长上升(锁的范围越粗、忘得越久,被挡住的人越多)。

怎么研究

  • 范式:算法层面,操作变换的收敛条件与无冲突复制数据类型的强最终一致性都有形式化定义与证明,可以在定理层面比较各方案;系统层面,用部署日志比较锁定式与合并式编辑器的等待事件率、吞吐量与合并后立刻回改的次数;用户层面,操纵粒度做受试实验,观测被挡率、被打断感与对结果文本质量的评分。
  • 变量:自变量为合并/锁定粒度、内容类型(散文/代码/表格)、群体规模;因变量为冲突感知频率、锁定等待时间、合并输出的语义可接受度。
  • 方法论注意点:形式化证明只覆盖「收敛」这一个性质,评价粒度是否合适最终要靠人对合并结果的语义判断,这无法自动化;用机器可算的指标(碰撞率、等待时长)替代语义质量评分,会系统性高估细粒度合并的表现。

边界

实时共创散文类内容(会议纪要、共写文档)里,字符级合并已是事实默认,因为碰撞少、语义宽容、且被挡住的代价高于拼错的代价。代码、电子表格公式这类全局语义敏感的产物正好相反:一行改动的含义取决于全文,字符级交织可能产出编译不过或逻辑错乱的结果,所以代码协作至今保留行级/块级的三方合并加人工确认。锁定适合「区域天然独占」的场景——我重写这一段时别人确实不该插手——但锁的边界必须与语义边界对齐:锁整篇文档来保护一个段落,是把所有人挡在门外。粒度没有全局最优,只有与内容类型和冲突密度的匹配。

怎么落地

  • 按产物语义选粒度:散文与自由画布用细粒度自动合并;代码、公式、结构化数据用行/块级粒度加显式冲突解决。
  • 锁定方案的锁范围收到「有意义的最小独占单元」,并加超时释放,避免一个人挂机锁住整段。
  • 同一系统内若锁定与合并并存(例如锁定单元格、合并自由文本),必须明确规则说明哪种情形走哪条路,不能让用户猜。
  • 验证:统计两个信号——等锁事件的人均次数(过高说明锁太粗),以及合并后十秒内对同区域的再次编辑(过高说明自动融合的结果不被接受)。

延伸

  • 同组V3.01.1 同时编辑同一处需要合并策略 · V3.01.3 合并结果需对用户可见
  • 相邻V3.02 冲突的呈现与保全 · V3.04 跟随与视口同步
  • 站内检索lock granularity · operational transformation · CRDT · three-way merge

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/V3.01.2