双缓冲模型


🌐 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不适用(从不等待)