A flow control strategy that accumulates updates and emits window control
frames when the accumulated value reaches a threshold.
The sender flow control window is represented in the receiver as two
buckets: a bigger bucket, initially full, that is drained when data is
received, and a smaller bucket, initially empty, that is filled when data is
consumed. Only the smaller bucket can refill the bigger bucket.
The smaller bucket is defined as a fraction of the bigger bucket.
For a more visual representation, see the
rocking bamboo fountain.
The algorithm works in this way.
The initial bigger bucket (BB) capacity is 100, and let's imagine the smaller
bucket (SB) being 40% of the bigger bucket: 40.
The receiver receives a data frame of 60, so now BB=40; the data frame is
passed to the application that consumes 25, so now SB=25. Since SB is not full,
no window control frames are emitted.
The application consumes other 20, so now SB=45. Since SB is full, its 45
are transferred to BB, which is now BB=85, and a window control frame is sent
with delta=45.
The application consumes the remaining 15, so now SB=15, and no window
control frame is emitted.