You will be fine

<Coroutine> 9. Hot & Cold Data Source

by BFine
반응형

출처&참고 : https://m.yes24.com/Goods/Detail/123034354

 

코틀린 코루틴 - 예스24

코틀린 전문 강사가 알려 주는 코틀린 코루틴에 대한 모든 것!코틀린 코루틴은 효율적이고 신뢰할 수 있는 멀티스레드 프로그램을 쉽게 구현할 수 있게 해 주어 자바 가상 머신(JVM), 특히 안드로

m.yes24.com

 

가.  데이터를 다루는 방법

  -  데이터는 어떤 목적, 특성 등에 따라서 서로 다른 접근&저장 방법을 가질 수도 있다. 그렇기 때문에 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가 필요하지 않다)

반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기