双缓冲模型


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