双缓冲模型
🌐 The two-buffer model
推送流使用两部分的缓冲系统。可以把它想象成一个水桶(缓冲区)通过水管(待写入数据)被灌满,当水桶满了时,一个浮球阀会关闭:
🌐 Push streams use a two-part buffering system. Think of it like a bucket (buffer) being filled through a hose (pending writes), with a float valve that closes when the bucket is full:
budget (e.g., 16384)
|
Producer v
| +---------+
v | |
[ write() ] ----+ +--->| buffer |---> Consumer pulls
[ write() ] | | | (bucket)| for await (...)
[ write() ] v | +---------+
+--------+ ^
| pending| |
| writes | float valve
| (hose) | (backpressure)
+--------+
^
|
'strict' mode limits this too! - 缓冲区(桶)——为消费者准备的数据,最多为
budget字节。当消费者拉取时,它会一次性将所有缓冲数据排入一个批次。 - 待写入(管道) -- 等待缓冲区空间的写入。在消费者清空后,待写入的内容会被提升到现在空的缓冲区中,并完成它们的承诺。
每项政策如何使用这些缓冲区:
🌐 How each policy uses these buffers:
| 政策 | 缓冲区限制 | 待处理写入限制 |
|---|---|---|
'strict' | budget | 1 |
'unbounded' | budget | 无上限 |
'drop-oldest' | budget | 不适用(从不等待) |
'drop-newest' | budget | 不适用(从不等待) |