<Coroutine> 9. Hot & Cold Data Source
by BFine출처&참고 : https://m.yes24.com/Goods/Detail/123034354
가. 데이터를 다루는 방법
- 데이터는 어떤 목적, 특성 등에 따라서 서로 다른 접근&저장 방법을 가질 수도 있다. 그렇기 때문에 Data Source를 Hot인지 Cold인지 잘 구분한다면
더 나은 성능과 비용을 절감 할 수 있을지도 모른다.
나. Hot Data Source
a. Hot Data Stream
- 열정적이라 데이터를 소비하는 것과 무관하게 원소를 생성한다. 예로 List, Set 같은 컬렉션이 있다.
- 항상 사용이 가능한 상태로 각 연산이 최종 연산이 될 수 있고 여러번 사용했을때 매번 다시 계산할 필요가 없다.
- 위 예시에서 볼 수 있듯이 따로 사용하지 않아도 데이터를 생성 한 것 을 볼 수 있다.
=> 즉 Hot Data 스트림의 빌더와 연산은 즉각 실행된다
b. Channel is Hot
- 코루틴의 Channel은 핫 데이터 스트림으로, 소비 여부와 관계없이 데이터를 즉시 생성한다.
=> 네트워크나 UI 이벤트와 같이 원래부터 Hot Data Source 나 어플리케이션에서 사용하기 좋다.
다. Cold Data Source
a. Cold Data Stream
- 게을러서 요청이 있을 때만 작업을 수행하고 아무것도 저장하지 않는다.
- 최소한의 연산만 수행하며 중간 생성되는 값을 저장하지 않기 때문에 메모리를 적게 사용한다.
fun main() {
val colds = sequence {
println("### start making the sentence")
yield("Hello")
yield("World")
yield("!!")
println("### end making the sentence")
}
println("use..")
colds.map{
println(it)
}.toList()
}
use..
### start making the sentence
Hello
World
!!
### end making the sentence
- 위의 예시에서 볼수 있듯이 sequence 생성 시점이 아닌 사용하는 시점에 실행되는 것을 볼 수 있다.
b. Flow is Cold
- Flow는 Cold Data Source 이므로 값이 필요 때만 생성한다. 그래서 Flow는 빌더가 아니고 어떤 처리도 하지 않는다.
=> 최종 연산이 호출될 때 원소가 어떻게 생성되어야 하는지 정의한 것에 불과하다. (그래서 CorotineScope가 필요하지 않다)
'공부 > Coroutine' 카테고리의 다른 글
<Coroutine> 11. 코루틴 Flow(플로우)의 함수들 (2) | 2024.09.07 |
---|---|
<Coroutine> 10. 코루틴 Flow(플로우) 살펴보기 (2) | 2024.09.01 |
<Coroutine> 8. 채널(Channel), 셀렉트(Select) (0) | 2024.08.15 |
<Coroutine> 7. 코루틴 단위 테스트 (1) | 2024.07.23 |
<Coroutine> 6. 일시 중단 함수와 코루틴 멀티스레드 (0) | 2024.07.07 |
블로그의 정보
57개월 BackEnd
BFine