MutableSharedFlow toma 3 parámetros: reproducción, extraBufferCapacity y onBufferOverflow. ¿Cuál es la diferencia entre reproducción y extraBufferCapacity?
La documentación menciona lo siguiente:
reproducción: la cantidad de valores reproducidos a los nuevos suscriptores (no puede ser negativo, el valor predeterminado es cero).
extraBufferCapacity: el número de valores almacenados en búfer además de la reproducción. emit no se suspende mientras queda un espacio de búfer (opcional, no puede ser negativo, el valor predeterminado es cero).
No entiendo exactamente la diferencia entre los 2 y cuándo necesitaríamos extraBufferCapacity> 0. ¿ExtraBufferCapacity es solo una capacidad de reproducción adicional para los emisores?
¿ExtraBufferCapacity es solo una capacidad de reproducción adicional para los emisores?
La terminología de "repetición" solo tiene sentido para los suscriptores, no para los emisores. El parámetro replay define cuántos valores pasados recibirán los nuevos suscriptores al suscribirse. Obviamente, implica que esos valores deben almacenarse, por lo que el búfer general debe ser al menos así de grande.
Sin embargo, el tamaño del búfer en su conjunto afecta a los emisores. La consecuencia exacta de un búfer lleno depende de onBufferOverflow , pero este tamaño de búfer se puede usar para controlar la contrapresión en los emisores (ralentizándolos) o cómo soltamos mensajes. Con un búfer más grande, puede permitir que los emisores tengan ráfagas de emisiones sin ralentizarlos, como cualquier búfer regular.
Ahora, elegir tener un búfer más grande no debería obligarlo a reproducir esos valores almacenados en el búfer a los nuevos suscriptores, de ahí el extraBufferCapacity . Con extraBufferCapacity > 0 , puede definir un búfer de cualquier tamaño deseado sin obligarlo a reproducir tantos valores, simplemente usando la fórmula:
bufferSize = replay + extraBufferCapacityPor ejemplo, podría decidir no reproducir ningún valor para los nuevos suscriptores, pero aún así permitir ráfagas de emisores al tener algún búfer (no reproducido).