双缓冲模型


🌐 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'highWaterMarkhighWaterMark
'block'highWaterMark无上限
'drop-oldest'highWaterMark不适用(从不等待)
'drop-newest'highWaterMark不适用(从不等待)

AltStyle によって変換されたページ (->オリジナル) /