Gemstone's Devlog

[Coroutine Flow] Buffering 본문

Kotlin (Android)

[Coroutine Flow] Buffering

Gemstone 2022. 6. 30. 18:16

https://kotlinlang.org/docs/flow.html#conflation

 

Asynchronous Flow | Kotlin

 

kotlinlang.org

 

위 공식 사이트에서 flow에 대해서 더욱 자세히 공부하다가 Buffering에 대해 정리하려고 한다.

Buffering을 하지 않았을 때 결과는 예상과 같았음.
Buffering을 사용했을 때의 확실히 속도가 개선되었다. (flowOn 연산자도 이러한 메커니즘으로 코루틴 디스패처를 바꿔주는 방식)
위 과정을 그림으로 나타냄

내가 이해한 바로는

Flow는 cold이기 때문에 collect를 호출해야만 데이터 스트림이 방출되고,

처음에 buffer를 등록해두고 collect를 통해 flow 데이터를 수집하기 시작할 때,

처음 emit에서 100ms가 걸리고, 처음 프로세스에서 300ms 가 소요되는 동안 emit(2)와 emit(3)의 결과가

buffer에 저장되고, 처음 프로세스가 끝나면 두번 째, 세번째 프로세스는 buffer에 저장된 emit된 결과를 가져오기만 하면

되기 때문에 효율성이 증대된다.