Coroutines 기초 알아보기 2편 - Coroutines Scope Builder 사용하기, Coroutine Job 명시적으로 사용하기, Coroutines는 light-weight 이다

2023. 2. 14. 22:00·공식 문서 번역/Coroutines 공식 문서
반응형

Coroutines Scope Builder 사용하기

coroutineScope builder은 일시 중단 함수 내부에서 복수의 동시 작업을 수행하기 위해 사용될 수 있다. doWorld 일시 중단 함수 내부에서 두 개의 동시에 수행되는 코루틴을 실행해보도록 하자. 

 

import kotlinx.coroutines.*

// doWorld와 "Done"을 순서대로 실행합니다.
fun main() = runBlocking {
    doWorld()
    println("Done")
}

// 두 섹션들을 모두 동시적으로 실행합니다
suspend fun doWorld() = coroutineScope { // this: CoroutineScope
    launch {
        delay(2000L)
        println("World 2")
    }
    launch {
        delay(1000L)
        println("World 1")
    }
    println("Hello")
}

📌 전체 코드는 이곳에서 확인할 수 있습니다.

 

launch { ... } 블록 내부의 두 코드들은 동시적으로 실행되어, 시작 후 1초가 지난 다음 "World 1"이 먼저 출력되고, 시작 후 2초가 지난 후에 "World 2"가 출력된다. doWorld의 coroutineScope은 이 둘 모두가 완료된 후에 종료되며, 그 후에야 doWorld가 반환되고 "Done" 문자열이 출력된다.

 

Hello
World 1
World 2
Done

 


📖 아래 내용은 독자의 이해를 위해 번역자가 추가한 글입니다.

*1. 중괄호 { ... } 내부의 코드를 뜻한다.

*2. 자식 Coroutine 을 뜻한다.

*3. 이전 코드는 다음과 같다. 

import kotlinx.coroutines.*

fun main() = runBlocking { 
    launch {  
        delay(1000L) 
        println("World!") 
    }
    println("Hello") 
}

이 글은 Coroutines 공식 문서를 번역한 글입니다.

 

원문 : Coroutines Basics - Scope builder , Coroutines Basics - Scope builder and concurrency

원문 최종 수정 :  2022년 6월 27일

 


Coroutine Job 명시적으로 사용하기

launch Coroutine builder는 실행된 Coroutine을 처리하고 완료를 명시적으로 기다리도록 하는데 사용할 수 있는 Job 객체를 반환한다. 예를 들어, 자식 코루틴이 완료될 때까지 기다린 다음 "Done" 문자열을 출력하도록 할 수 있다.

import kotlinx.coroutines.*

fun main() = runBlocking {
    val job = launch { // 새로운 코루틴을 실행하고 그 Job에 대한 참조를 유지한다 
        delay(1000L)
        println("World!")
    }
    println("Hello")
    job.join() // 자식 코루틴이 완료될 때까지 기다린다.
    println("Done")     
}

📌 전체 코드는 이곳에서 확인할 수 있습니다.

 

 

이 코드는 다음 결과를 만든다.
Hello
World!
Done
 
 

이 글은 Coroutines 공식 문서를 번역한 글입니다.

 

원문 : Coroutines Basics - An explicit job

원문 최종 수정 :  2022년 6월 27일

 


Coroutines는 light-weight 이다

Coroutines는 JVM의 Thread들보다 덜 리소스 집약적이다. Thread를 사용할 때 JVM의 가용 메모리를 소진시키지는 코드는 Coroutine을 사용하여 리소스의 제한치에 도달하지 않도록 표현될 수 있다. 예를 들어, 다음의 코드는 각각이 5초간 기다린 후 마침표('.)를 출력하는 100,000개의 별개의 Coroutine을 실행하면서도 매우 적은 메모리만을 사용한다.

 

import kotlinx.coroutines.*

fun main() = runBlocking {
    repeat(100_000) { // 많은 수의 코루틴을 실행한다.
        launch {
            delay(5000L)
            print(".")
        }
    }
}

📌 전체 코드는 이곳에서 확인할 수 있습니다.

 

만약 위와 같은 프로그램을 Thread들을 이용하여 작성한다면(runBlocking을 제거하고 launch를 thread로 대체하고, delay를 Thread.sleep으로 대체), 많은 메모리를 사용하게 되어 out-of-memory error을 발생시킬 것이다.

 


이 글은 Coroutines 공식 문서를 번역한 글입니다.

 

원문 : Coroutines Basics - Coroutines are light-weight

원문 최종 수정 :  2022년 6월 27일

 


목차로 돌아가기

 

Kotlin Coroutines 공식 문서 한국어 번역본 : Coroutines 한 번에 정리하기

Kotlin Coroutines 공식 문서 번역을 시작하며 Kotlin Coroutines는 Kotlin을 위한 강력한 비동기 솔루션이다. 안드로이드 실무에서는 한동안 높은 점유율을 자랑한 RxJava를 Coroutines가 대체하고 있으며, 새로

simplecode.kr

 

반응형

'공식 문서 번역 > Coroutines 공식 문서' 카테고리의 다른 글

Coroutines 실행 시간 제한하기 - Timeout, 비동기 Timeout과 리소스  (0) 2023.02.17
Coroutines 취소 2편 - finally를 사용해 리소스 닫기, 실행 취소가 불가능한 블록 실행하기  (0) 2023.02.16
Coroutines 취소 1편 - Coroutine 실행 취소하기, Coroutines 취소는 협력적이다, Coroutine의 Computation 코드를 취소 가능하게 만들기  (0) 2023.02.15
Coroutines 기초 알아보기 1편 - 첫 Coroutines 작성하기, 함수 추출해 Coroutines 코드 리펙토링하기, Coroutines Scope Builder 사용하기  (1) 2023.02.13
Kotlin Coroutines 공식 문서 한국어 번역본  (1) 2023.02.12


'공식 문서 번역/Coroutines 공식 문서' 카테고리의 다른 글
  • Coroutines 취소 2편 - finally를 사용해 리소스 닫기, 실행 취소가 불가능한 블록 실행하기
  • Coroutines 취소 1편 - Coroutine 실행 취소하기, Coroutines 취소는 협력적이다, Coroutine의 Computation 코드를 취소 가능하게 만들기
  • Coroutines 기초 알아보기 1편 - 첫 Coroutines 작성하기, 함수 추출해 Coroutines 코드 리펙토링하기, Coroutines Scope Builder 사용하기
  • Kotlin Coroutines 공식 문서 한국어 번역본
심플코드
심플코드
프로그래밍을 어렵지 않게 풀어서 설명하는 기술 블로그
    반응형
  • 심플코드
    심플코드
    심플코드
  • 전체
    오늘
    어제
    • 분류 전체보기 (96)
      • 안드로이드를 위한 Coroutines (2)
      • Unit Testing (19)
      • GitHub Actions (0)
      • 공식 문서 번역 (35)
        • Coroutines 공식 문서 (35)
      • 알고리즘 (7)
        • Kotlin 자료구조 (0)
        • 알고리즘 (7)
        • Kotlin으로 구현하는 자료구조 (0)
      • 코딩 테스트 (0)
      • Deep Learning (0)
      • Machine Learning Math (17)
        • Linear Algebra (17)
      • ML (0)
      • Docker (15)
      • Kubernetes (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 코틀린 코루틴의 정석 책 출간 소식
  • 인기 글

  • 태그

    coroutine
    numpy
    컨테이너
    mockito
    TensorFlow
    unit test
    Docker
    junit
    Coroutines
    Coroutines Context
    Coroutines Channel
    unit testing
    코루틴 채널
    코루틴 Flow
    Kotlin
    Machine Learning
    코루틴
    도커
    pytorch
    Coroutines Flow
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
심플코드
Coroutines 기초 알아보기 2편 - Coroutines Scope Builder 사용하기, Coroutine Job 명시적으로 사용하기, Coroutines는 light-weight 이다
상단으로

티스토리툴바