Coroutine ContextCoroutineContext는 다음과 같이 코루틴 빌더 함수에 보인다 .. 대체 뭘까?public fun CoroutineScope.launch( context: CoroutineContext = EmptyCoroutineContext, start: CoroutineStart = CoroutineStart.DEFAULT, block: suspend CoroutineScope.() -> Unit): Jobpublic fun CoroutineScope.async( context: CoroutineContext = EmptyCoroutineContext, start: CoroutineStart = CoroutineStart.DEFAULT, bl..
코루틴 디스패처 (Coroutine Dispatcher)코루틴 디스패처란?코루틴을 스레드로 보내 실행시키는 역할, 코루틴을 스레드로 보내는 데 사용할 수 있는 스레드나 스레드 풀을 가짐실행 요청한 스레드에서 코루틴이 실행될 수 있게 함→ CoroutineDistpatcher 는 코루틴의 실행을 관리하는 주체로실행 요청된 코루틴을 작업 대기열에 적재하고스레드가 새로운 작업을 시작할 수 있는 상태라면 스레드에 코루틴을 보내 실행함제한된 디스패처와 무제한 디스패처제한된 디스패처: 사용할 수 있는 스레드, 스레드풀이 제한무제한 디스패처: 사용할 수 있는 스레드, 스레드풀이 제한되지 않음 → 실행 요청된 코루틴이 이전 코드가 실행된 스레드에서 계속 실행 됨제한된 디스패처 생성Single-Thread Dispatc..
코루틴 빌더코루틴 빌더 함수 호출 시 새로운 코루틴 생성모든 코루틴 빌더 함수는 코루틴을 추상화한 Job 객체 생성runBlockingpublic actual fun runBlocking(context: CoroutineContext, block: suspend CoroutineScope.() -> T): T새로운 코루틴을 실행한 뒤 완료될 때까지 현재 스레드를 중단 가능한 상태로 blocking,따라서 runBlocking 내부에서 delay(1000L) 호출 시 Thread.sleep(1000L) 과 비슷하게 작동runBlocking 이 사용되는 경우메인 함수: 프로그램이 끝나는 걸 방지하기 위해 스레드를 블로킹할 필요가 있을 경우유닛 테스트현재는 거의 사용되지 않고 유닛 테스트에는 runTest ..
Chapter 1: 스레드 기반 작업의 한계와 코루틴의 등장멀티 스레드 프로그래밍단일 스레드일 경우 작업을 순차적으로 처리해야 하므로 처리 속도, 응답속도 늦어짐 → 해결 방안으로 멀티 스레드 등장여러 개의 스레드로 작업을 실행 하여 메인 스레드에 처리가 오래 걸리는 작업이 요청 되었을 때 그 작업을 백그라운드 스레드로 돌려서 처리하도록 함멀티 스레드 구현 방식Thread Classpackage chapter1.code5import kotlin.concurrent.threadfun main() { println("[${Thread.currentThread().name}] 메인 스레드 시작") thread(isDaemon = false) { println("[${Thread.currentThrea..