Chr*_*n C 17 android kotlin kotlin-coroutines kotlin-flow kotlin-sharedflow
MutableSharedFlow 有 3 个参数:replay、extraBufferCapacity 和 onBufferOverflow。replay 和 extraBufferCapacity 有什么区别?
该文档提到以下内容:
replay - 重播给新订阅者的值的数量(不能为负数,默认为零)。
extraBufferCapacity - 除了重放之外缓冲的值的数量。当还有剩余缓冲区空间时,emit 不会暂停(可选,不能为负数,默认为零)。
我不明白两者之间的区别以及何时需要 extraBufferCapacity > 0。 extraBufferCapacity 只是发射器的额外重播能力吗?
Jof*_*rey 19
extraBufferCapacity 只是发射器的额外重播能力吗?
“重播”术语只对订阅者有意义,对发射者没有意义。该replay参数定义新订阅者在订阅时将收到多少个过去的值。这显然意味着需要存储这些值,因此总体缓冲区至少需要这么大。
然而,缓冲区大小(作为一个整体)会影响发射器。完整缓冲区的确切结果取决于onBufferOverflow,但此缓冲区大小可用于控制发射器上的背压(减慢它们的速度)或我们如何丢弃消息。使用更大的缓冲区,您可以允许发射器进行突发发射,而不会像任何常规缓冲区一样减慢发射速度。
现在,选择更大的缓冲区不应迫使您向新订阅者重播这些缓冲值,因此extraBufferCapacity. 使用extraBufferCapacity > 0,您可以定义任何所需大小的缓冲区,而无需强制您重播尽可能多的值,只需使用以下公式即可:
bufferSize = replay + extraBufferCapacity
Run Code Online (Sandbox Code Playgroud)
例如,您可以决定根本不向新订阅者重播任何值,但仍然通过拥有一些(非重播)缓冲区来允许发射器突发。
| 归档时间: |
|
| 查看次数: |
6676 次 |
| 最近记录: |