关于 principle-separate-before-serializing-shared-state
这项开发技能用于处理并发参与者使用的可变状态。它建议消除不必要的共享写入目标,并在确需共享时以结构化方式串行访问。
主要功能
- 01识别共享可变状态
- 02为参与者分配独立写入目标
- 03在读取或报告边界合并
- 04以结构化方式串行化必要写入
适用场景
- 01审查并发工作者设计
- 02避免共享文件或分支中的竞态
- 03判断何时采用锁或单写入者所有权
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ ericlitman/ open-pstack --skill principle-separate-before-serializing-shared-state安装后在 Claude Code 中输入/principle-separate-before-serializing-shared-state确认已加载。
详细介绍
在序列化共享状态之前先消除共享
当并发参与者可能共享可变状态时,首先要问他们是否需要同一个可变对象。如果不需要,就消除共享。如果确实需要共享,就通过结构化方式强制串行化:锁文件、顺序执行的阶段、独占所有权。指令和约定不能控制并发。
原因: 对共享状态的并发写入会产生竞态条件,问题时有时无、难以复现,调试成本也很高。
模式:
- 识别共享的可变状态(双方都会读写的文件、双方都会推送到的分支、双方都会定义并使用的 API)。
- 默认做法:消除共享写入目标。 问问自己:这些参与者需要的是一个规范对象,还是在发布彼此独立的信息?为每个参与者分配各自拥有的文件、键、分支或状态目录,只在读取或报告的边界处合并。两个工作进程将各自的
lastX字段写入同一个state.json,仍然属于共享修改。indexer-state.json+metrics-state.json则不属于共享修改。 - 只有当一个共享写入目标确实是不可违背的约束时,才以结构化方式串行化访问(锁文件、顺序执行的阶段、单写入者参与者或原子比较并交换)。把“我们需要一把锁”视为需要检查的设计异味,而不是默认答案。
评论
支持 Markdown