본문 바로가기

Kotlin/Coroutine8

(Coroutine) 3. async 1. suspend 함수의 순차적 수행 아래 예시를 통해 suspend 함수를 순차적으로 수행해보자. suspend fun getRandom1(): Int { delay(1000L) return Random.nextInt(0, 500) } suspend fun getRandom2(): Int { delay(1000L) return Random.nextInt(0, 500) } fun main() = runBlocking { val elapsedTime = measureTimeMillis { val value1 = getRandom1() val value2 = getRandom2() println("$value1 + $value2 = ${value1+value2}") } println(elapsedTime).. 2022. 9. 14.
(Coroutine) 2. Light weight Thread, Job 1. Light weight Thread == Coroutine 코루틴 공식 가이드를 살펴보면 코루틴을 경량화된 쓰레드(Light-weight Thread) 라고 표현하고 있다. 경량화된 쓰레드가 무엇일까? 앞서 살펴본 예시들의 출력 결과를 봐보자. >> runBlocking: main @coroutine#1 >> Hello >> launch: main @coroutine#2 >> World! 출력 결과를 통해 알 수 있듯이 코루틴은 쓰레드 상에서 실행된다. 위 결과는 main 쓰레드에서 수행된 2개의 코루틴에 대한 결과이다. 즉, 코루틴은 쓰레드 없이 단독적으로 수행되거나 다른 수단에 의해 실행될 수 없다는 것을 뜻한다. 그렇기 때문에, 여러 코루틴이 한 쓰레드에서 수행될 수 있지만 코루틴이 동시에 수.. 2022. 9. 12.
(Coroutine) 1. Coroutine Basic 1. Simple Coroutine 코루틴을 만드는 함수는 코루틴 빌더라고 부른다. 코루틴을 만드는 가장 간단한 방법으로 runBlocking 함수가 있다. runBlocking 함수는 코루틴을 만들고, 블록 수행이 끝날 때 까지 다음 코드를 수행하지 못하게 막는 코루틴 빌더이다. runBlocking 함수는 반환 값을 지정해줄 수 있다. 이때, 기본 반환타입은 Unit이다. fun test() = runBlocking { // 반환 타입 : Int ... 3 // 최종 반환 값 } 2. 코루틴 빌더의 수신 객체 runBlocking 블록 안에서 this를 출력했을 때 결과를 살펴보자. fun main() = runBlocking { println(this) } >> "coroutine#1":Blocki.. 2022. 9. 12.
(Coroutine) 0. 개요 및 특징 1. 루틴? 코루틴? 1.1. 루틴, 메인 루틴, 서브 루틴 루틴(Routine)은 어떤 작업을 정의한 명령어의 집합을 의미한다. 간단하게 우리가 작성하는 코드들의 집합이라고 볼 수 있다. 따라서 하나의 프로그램은 보통 크고 작은 여러 가지 루틴들을 조합하여 만들어진다고 볼 수 있다. 루틴은 다시 메인 루틴(Main Routine)과 서브 루틴(Sub Routine)으로 나뉜다. 일반적으로 main 함수에 의해 수행되는 프로그램의 흐름을 메인 루틴이라고 한다. 반면, main 함수 안에서 실행되는 개별 함수들에 의해 수행되는 흐름을 서브 루틴이라고 한다. 메인 루틴과 서브 루틴의 차이는 아래의 코드를 통해 쉽게 확인할 수 있다. fun main() { val addValue = plusOne(10) //.. 2021. 12. 20.