suspend
·
개념 저장소/coroutine
1. suspend 함수란suspend 함수는 코루틴 내에서만 호출할 수 있는 특수한 함수이다.이 함수는 실행 중 특정 시점에서 중단되었다가 필요할 때 다시 실행을 재개할 수 있는 특성을 가진다.2. 특징중단 가능: suspend 함수는 특정 조건에서 중단될 수 있으며 이후 다시 재개된다.코루틴 컨텍스트: suspend 함수는 호출될 때 코루틴의 컨텍스트에서 실행된다.스레드가 항상 돌아오는 것은 아님: 중단된 suspend 함수가 다시 실행될 때 같은 스레드가 아니라 다른 스레드에서 실행될 수 있다. 코루틴 디스패처의 정책에 따라 결정된다.직관적인 비동기 코드 작성: 콜백 지옥을 피하고, 비동기 코드를 동기 코드처럼 작성할 수 있다.suspend fun example(st: String) { pri..
구조화된 동시성
·
개념 저장소/coroutine
1. 코루틴 실행환경 복사코루틴 컨텍스트의 속성 복사 덮어쓰기: 코루틴은 기본적으로 부모의 컨텍스트를 복사해서 새로운 컨택스트를 생성한다. 특정 속성은 명시적으로 덮어쓸 수 있다.runBlocking { launch { println("부모 컨텍스트 상속") } launch(Dispatchers.Default) { println("디스패처 덮어쓰기") }}각 코루틴은 독립적인 Job을 생성한다. launch나 async와 같은 코루틴 빌더는 항상 새로운 Job을 생성하고 부모의 컨텍스트를 상속받아 구조화된 동작을 유지할 수 있다. 이렇게 생성된 각 Job은 독립적으로 실행되지만 부모-자식 관계를 통해 라이프사이클이 관리 된다2. 취소전파부모 코루틴이 취소되면..
runBlocking
·
개념 저장소/coroutine
1. runblocking이란runBlocking은 비동기 코드를 동기적인 환경으로 가져오는 역할을 한다. launch, async, produce는 비동기 코드를 동기 코드처럼 사용할 수 있게 해주는 도구다. 반면 runBlocking은 비동기 코드를 완전히 동기 코드로 변환해주는 특별한 도구다. 예를 들어, 1초 동안 대기하는 delay(1000)이라는 비동기 함수가 있다. 이 함수는 코루틴 안에서만 사용 가능하기 때문에 동기 코드 환경에서는 실행할 수 없다. 하지만 runBlocking으로 delay(1000)을 감싸면 이 비동기 함수는 동기 코드처럼 실행된다. 이렇게 runBlocking은 비동기 작업을 동기적으로 사용할 수 있게 해준다.2. 예제import kotlinx.coroutines.*f..