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