코루틴

    [Coroutine] 8. Coroutine Job의 상태 변수 isActive, isCancelled, isCompleted 알아보기

    Job의 상태 변수 : isActive, isCancelled, isCompleted Job의 상태 변수는 세가지가 있는데 의 방식으로 접근이 가능하다. 이 상태 변수들은 다음과 같이 설명될 수 있다. isActive: Job이 실행중인지 여부를 표시 isCancelled: Job cancel이 요청되었는지 여부를 표시 isCompleted: Job의 실행이 완료되었거나 cancel이 완료었는지를 표시 자세한 상태변화를 아래 예시와 함께 알아보자. Job이 CoroutineStart.LAZY 옵션으로 생성되었을 때 상태 변화 Job을 생성됨에서 실행중 상태로 자동으로 넘기지 않기 위해 CoroutineStart.LAZY 옵션을 이용해 Job의 상태변수를 다루어보자. isActive isCancelled ..

    [Coroutine] 7. Coroutine Job 상태 관리하기 : New, Active, Completed, Cancelling, Cancelled

    Job의 상태 Job의 상태는 생성, 실행 중, 실행 완료, 취소 중, 취소 완료 총 5가지이다. 생성(New) : Job이 생성된다. 실행 중(Active) : Job이 실행 중이다. 실행 완료(Completed) : Job의 실행이 완료되었다. 취소 중(Cancelling) : Job이 취소되는 중이다. Job이 취소되면 리소스 반환 등의 작업을 해야 하기 때문에 취소 중 상태가 있다. 취소 완료(Cancelled) : Job의 취소가 완료되었다. 앞선 글에서 다룬 내용 : Job의 생성과 실행 앞선 글에서 우리는 Job의 생성과 실행을 다루었다. launch를 통한 Job의 생성 및 실행 launch에 CoroutineStart.LAZY 옵션을 추가하여 Job을 바로 실행되지 않게 만들기 Corou..

    [Coroutine] 5. suspend fun의 이해

    일시중단 가능한 코루틴 코루틴은 기본적으로 일시중단 가능하다. launch로 실행하든 async로 실행하든 내부에 해당 코루틴을 일시중단 해야하는 동작이 있으면 코루틴은 일시 중단된다. 예시로 보는 일시중단 일시 중단 가능하다는 것이 무엇인지 알기 위해 을 보자. 위 그림을 코드로 표현하면 다음과 같다. 주석의 숫자와 그림1의 숫자를 일치하도록 하였다. fun exampleSuspend() = runBlocking { // 2. IO Thread에서 작업3를 수행한다. val job3 = async(Dispatchers.IO) { Thread.sleep(100L) (1..10000).sortedByDescending { it } // 5. 작업3이 완료된다. } val job1 = launch { // ..

    [Coroutine] 4. launch, async 사용해 Dispatcher에 Coroutine 실행 요청하기

    앞선 글까지 Dispatcher을 만드는 과정을 거쳤다. 이제부터 본격적으로 Coroutine을 만들어 Dispatcher에 실행을 요청할 것이다. Dispatcher에 Coroutine 실행 요청하기 Dispatcher에 Coroutine을 실행 요청하는 작업은 launch{ }와 aync{ } 두가지 메서드를 통해 가능하다.결과 반환이 없는 단순 작업에는 launch를 결과 반환이 필요한 작업에는 async를 사용한다. 결과 반환 반환타입 launch X Job async O Defered 결과를 반환하지 않는 launch launch는 결과를 반환하지 않고 launch 수행 시 job이 반환된다. val job: Job = launch { println(1) } 결과를 반환하는 async async..

    [Coroutine] 3. Coroutine의 Dispatcher 란 무엇인가?

    Coroutine을 공부하면서 Dispatcher에 대해 상세히 설명된 글이 없어서 이 글을 작성하게 되었다. 많은 사람들에게 도움이 되길 바란다. Dispatcher 코루틴을 시작하게 되면, Dispatcher란 단어를 가장 먼저 접하게 된다. Dispatch란 한국어로 '보내다' 라는 뜻이다. 그렇다면 Dispatcher란 무엇을 보내는 것일까? 바로 스레드(Thread)에 코루틴(Coroutine)을 보낸다. 코루틴에서는 스레드 풀을 만들고 Dispatcher를 통해서 코루틴을 배분한다. 즉, 코루틴을 만든 다음 해당 코루틴을 Dispatcher에 전송하면 Dispatcher은 자신이 관리하는 스레드풀 내의 스레드의 부하 상황에 맞춰 코루틴을 배분한다. 이를 시각적으로 표현하면 다음과 같다. 1. ..