#4797·servers

内存:两个服务器进程默默地丢弃彼此的写入(每个进程都有一个 #4555 互斥量)

作者: daichiyasunami-vottia创建于 2026年9月12日更新于 2026年9月16日

描述错误

`#4555' 固定了读取-修改-写作比赛** 在一个过程** 中,将“知识GraphManager. with Lock”后面的所有六种变异方法序列化。 起作用了:同时有20个针对一个服务器的“创建实体”电话现在保留了全部20个。

两个服务器进程共享一个‘MEMORY FILE PATH'仍然默默地抛弃了对方的写作. 排队方式是per-intance ('private 突变Queue'),而'saveGraph'则写出临时文件并"重命名"于目标之上——这保证了文件永远不会被*corrupt *,同样保证最后一个重命名取代了另一个过程的批发工作.

这个服务器的正常部署形状是: MCP 客户端自生自灭的服务器进程,因此两个客户端(Claude 桌面外加一个编辑器,一个repo的两个取出/工作树,两个代理)都指向了默认的"memory.json"是一个文件中的两个进程.

测量

使用:https://GitHub.com/daichiyasunami-vottia/并行-memory-mcp/blob/main/bench/bench server memory.mjs-在stdio上产入服务器,发送Ncreate entities'电话,然后算入幸存实体. MEMORY-FILE-PATH'是每跑一次的新临时文件。

macOS 26.5.1(arm64,APFS),节点25.9.0,N=20,每次3跑——结果各跑相同.

  • 假想 * npm 2026.8.31 ' main ' @`d73f99e '
    | -- -- -- -- -- -- -- -- -- -- -- -- --

QQ序列,一个进程 20 / 20 / 20

  • 20 并存,两个进程,一个文件 * **1 / 20 ** * **10 / 20 ** *

每一次呼叫都返回所有三行中的成功:"ok respons=20个出错 respons=0". 没有升起,没有警告。

两流程行值得仔细观察:

幸存者:实体-1、实体-3、实体-5、实体-7、实体-9、实体-11、实体-13、实体-15、实体-17、实体-19
平方:偶数(procA)=0奇数(procB)=10

进程 A的10个实体没有部分丢失——它们完全消失。 因为每个过程现在都进行内部序列化,所以每个过程都会建立自相矛盾的图表快照,而失败者的全部贡献被胜利者快照所取代. 在#4555之前,损失经过了精细的磨损(20起中有一个幸存者);之后是粗糙的磨损(一个过程的整个过程). #4555仍然是一个明显的改进——但是它留下的失败更容易被误认为"另一个特工从未写出任何东西".

需要多少重叠(两个过程,交替写作 " 主要 " ):

QQ 发送间隔 QQ 保留 QQ | -- -- -- -- -- -- --

· 10 ms 19 / 20 | 20分/20分以上

因此这需要两个过程的负载- mutate-save 窗口重叠——这个文件系统中大约几毫秒. 这正是当两种制剂同时保存时会发生的情况,对于背景/平行制剂而言,这两种制剂的使用是例行的,而不是异地的。

重写

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? Git Clone https://GitHub.com/daichiyasunami-vottia/ 并行-记忆-mcp cd 平行-相模-相模/相模 npm init - 52. npm I @modelcontextprotocol/server-memory (英语).

已经出版的建筑

节点 . . . . . . .

内容来源: modelcontextprotocol/servers