Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- with recursive
- 백준 17626
- 파이썬
- 백준 17779
- 웹어플리케이션 서버
- 프로그래머스
- re.split
- 백준 16719
- JPA
- springboot
- Kotlin
- spring oauth
- 백준 19238
- 백준 16236
- Coroutine
- java 기술면접
- 백준
- JVM
- java
- spring security
- 백준 파이썬
- 백준 16235
- 백준 15685
- sql 기술면접
- MySQL
- 프로래머스
- MSA
- Spring Boot
- spring cloud
- Spring
Archives
- Today
- Total
시작이 반
[Kotlin] CoroutineScope란? 본문
SMALL
CoroutineScope
CoroutineSocpe는 Coroutine이 실행될 수 있는 범위를 나타낸다.
이 범위는 Coroutine의 라이프사이클과 관련이 있으며 Coroutine이 완료되거나 종료될때 해당 범위가 생성되거나 없어진다.
코루틴 스코프 내에서 실행되는 코루틴은 부모-자식 관계를 가지며 자식의 코루틴이 예외가 발생하면 부모로 전파를 하여 모두 종료가된다. (But, 슈퍼 바이저 잡을 사용하면 예외 전파를 자식에게만 할 수 있다.)
코루틴 스코프를 만드는 방법에는 하위와 같은 방법 등이 있다.
코루틴 스코프 빌더 | 코루틴 빌더 |
runBlocking | launch |
coroutineScope | async |
withContext | produce |
supervisorScope | actor |
GlobalScope | runBlocking (top-level) |
- runBlocking : 메인 함수 또는 테스트 코드에서 사용되며, 코루틴 실행이 완료될 때까지 현재 스레드를 차단합니다.
- coroutineScope : 코루틴 스코프를 만들어 줍니다. 모든 자식 코루틴이 완료될 때까지 해당 코루틴 스코프에서 블록됩니다.
- withContext : 코루틴 컨텍스트를 변경합니다. 지정된 컨텍스트에서 코드 블록이 실행됩니다.
- supervisorScope : coroutineScope과 유사하지만, 자식 코루틴에서 발생하는 예외에 대해 부모 코루틴을 영향받지 않도록 보장합니다.
- GlobalScope : 전역 코루틴 스코프를 제공합니다. 애플리케이션 수준에서 코루틴을 실행할 때 사용됩니다.
- launch : 비동기 코루틴을 시작합니다. 코루틴이 백그라운드에서 실행되며, 코루틴이 끝날 때까지 기다리지 않습니다.
- async : 비동기 작업을 실행하고 결과를 반환합니다. await 함수를 사용하여 결과를 기다릴 수 있습니다.
- produce : 소비자-생산자 모델을 구현하는 데 사용됩니다. 코루틴으로 데이터를 생성하고 소비하는 코루틴을 만들 수 있습니다.
- actor : produce와 유사하지만, 소비자 코루틴에서 메시지를 처리하는 동안 상태를 유지할 수 있는 코루틴입니다.
코루틴 빌더는 코루틴 스코프의 확장 함수로 정의된다. 이로써 소속된 코루틴 스코프의 코루틴 컨텍스트를 자동으로 상속받는다. 최상위에 스코프를 하나 생성하고 계속 코루틴 빌더를 사용해서 스코프를 이어나갈 수 있다.
CoroutineSocpe는 하나의 멤버 속성으로 CoroutineContext를 가지고 있다.
CoroutineContext
CoroutineContext란 Coroutine을 실행하기 위한 환경을 정의하는데 사용된다. (스레드 풀, 예외처리기, 디스패처 등.)
CoroutineContext를 이용하여 코루틴의 실행 환경을 제어할 수 있다.
명시하지 않으면 빈 Context가 들어감
CoroutineContext는 아래와 같은 여러개의 Element를 가지고 있다. 아래 요소를 조합해서 새로운 Context를 만들 수 있따.
- Job: 코루틴의 작업 단위를 나타냅니다. 코루틴의 실행 상태를 관리하는데 사용됩니다.
- CoroutineDispatcher: 코루틴이 실행될 스레드를 관리하는 역할을 합니다. 코루틴의 실행 환경에 대한 컨텍스트 정보 중 하나입니다.
- CoroutineName: 코루틴의 이름을 나타냅니다. 디버깅 용도로 사용됩니다.
- CoroutineExceptionHandler: 코루틴에서 예외가 발생할 때 처리하는 핸들러입니다.
CoroutineDispatcher
CoroutineDispatcher는 아래와 같은 종류가 있다.
- Dispatchers.Default: CPU 바운드 작업에 적합한 공유 백그라운드 스레드 풀을 사용하는 디스패처입니다.
- Dispatchers.IO: I/O 바운드 작업에 적합한 공유 백그라운드 스레드 풀을 사용하는 디스패처입니다.
- Dispatchers.Main: 안드로이드의 UI 스레드에서 코루틴을 실행하기 위한 디스패처입니다.
- Dispatchers.Unconfined: 현재 스레드에서 즉시 실행되는 디스패처입니다. 이 디스패처를 사용하면 다른 스레드로 코루틴이 이동하지 않습니다.
- 사용자 정의 디스패처: 사용자가 직접 만들어서 사용할 수도 있습니다. 이 경우에는 CoroutineDispatcher 클래스를 상속받아서 구현하면 됩니다.
LIST
'Programming > Kotlin' 카테고리의 다른 글
[Kotlin] SpringBoot + Coroutine 성능테스트 (1) | 2023.06.06 |
---|---|
[Kotlin] Coroutine 공유 데이터 문제 해결하기 (1) | 2023.05.15 |
[Kotlin] Coroutine을 사용하여 API 병렬 처리 (0) | 2023.04.30 |
[Kotlin] 코틀린 문법 (0) | 2022.09.06 |