- 
                Notifications
    
You must be signed in to change notification settings  - Fork 24
 
Flows: Buffering
        Devrath edited this page Jan 19, 2024 
        ·
        2 revisions
      
    - Consider a scenario when we encounter a flow and usually, the rate at which the flow is produced is faster than the rate at which the flow is consumed.
 - Meaning consumption takes more time than emission
 - Using buffering we can improve this in a better way here.
 
Observation
Time Taken:-> 1122 // Without buffer
Time Taken:-> 1088 // With buffer- Note when we add the buffer the time taken overall is reduced
 - This is because, without a buffer after each emission, it takes time to process the emission but since we give some buffer limit, It will keep emitting to the buffer quantity and start collection.
 - Thus if we increase the buffer quantity, the time decreases even more.
 
Code
    private val bufferDemoFlow = flow {
        // Make 10 emissions in iteration
        repeat(10){
            // Give some delay
            delay(50)
            println("Emission -> $it")
            emit(it)
        }
    }.flowOn(Dispatchers.Default)
   fun buffering() = viewModelScope.launch{
        // It will show the time taken to execute this block of code
        val time = measureTimeMillis {
            bufferDemoFlow.buffer(5).collect {
                delay(100)
                println("Collection -> $it")
            }
        }
        println("Time Taken:-> $time")
    }