일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Rxjava
- Gradle
- 백준
- TEST
- MyVoca
- 프로그래머스
- 쿠링
- GitHub
- androidStudio
- boj
- Coroutine
- MiTweet
- Compose
- activity
- relay
- ProGuard
- android
- 코드포스
- AWS
- Kotlin
- 암호학
- livedata
- pandas
- Codeforces
- textfield
- Python
- Hilt
- architecture
- Coroutines
- 코루틴
- Today
- Total
목록Coroutine (6)
이동식 저장소
3달 전에 이런 글을 쓴 적이 있다. [Kotlin] 코루틴의 실행 순서와 테스트 코드 비동기 코드는 본질적으로 어렵다. 제대로 공부하지 않은 비동기 코드는 더 어렵다. 지난 몇 일간 코루틴 ``ViewModel`` 코드를 테스트하다 아주 열불이 나서..;; 이참에 제대로 다시 공부해 보자. ``s thinking-face.tistory.com 위의 글에서 언급된 ``ViewModel`` 테스트는 여전히 해결되지 않았다. 실행할 때마다 결과가 달라지는 테스트라니.. 심지어 원격 빌드에서도 실패하는 바람에 빌드가 멈춘 적도 있다. 하지만 7월의 마지막 주말, 바로 오늘, 끈질기게 나를 물고 늘어지던 버그를 바로 오늘 해결했다. 이 글에서는 문제 상황과 문제를 풀기 위한 나의 눈물겨운 싸움을 기록하려 한다...
아래의 글을 요약하였음을 밝힙니다. Coroutines & Patterns for work that shouldn’t be cancelled Cancellation and Exceptions in Coroutines (Part 4) medium.com 코루틴은 자신의 scope가 종료될 때 같이 종료된다. 예를 들어 ``viewModelScope``에서 시작한 코루틴은 ``ViewModel``이 destroy되면 자신의 작업이 끝나지 않았더라도 종료된다. 종료되는 범위를 넓혀서 앱이 종료되기 전까지 종료되지 않는 코루틴을 실행하려면 ``Application``에 커스텀 scope를 정의하고, 정의한 scope를 코루틴을 실행할 객체에 inject하여 사용해야 한다. class MyApplication :..
다음 두 코드의 차이점은 무엇일까? suspend fun test() { launch { // ... } } suspend fun test() = launch { // ... } 거의 똑같다 둘 다 ``launch``를 실행하여 코루틴을 만든다. 유일한 차이점이라면 1번 코드의 반환값이 ``Unit``인 반면, 2번 코드의 반환값은 새로 만들어진 코루틴 ``Job``이라는 점. 둘 중 편한 걸 쓰면 되겠다. 나는 코루틴을 제어할 여지가 있는 2번 코드를 선호하는 편이다.
목차 문제 정의 Volatile? Thread-safe가 필요하다 Thread confinement: fine-grained Thread confinement: coarse-grained Mutual exclusion Actors 참고 문헌 Dispatchers.Default 등의 멀티 스레드 dispatcher를 사용하면 여러 개의 코루틴을 동시에 실행할 수 있다. 이 과정에서 여러 동시성 문제가 발생할 수 있다. 가장 대표적인 문제로 shared mutable state가 있다. 운영체제 과목을 수강한 적이 있다면 잘 알고 있을 것이다. 요약하자면 수정 가능한 값에 여러 스레드가 동시에 접근하려고 할 때 어떻게 해야 하는지에 대한 문제이다. 값을 읽기만 한다면 모를까, 동시에 수정하려고 하면 매우 큰..
다양한 suspending 함수를 조합해 보자. 순차적으로 실행된다 다음의 두 suspending 함수가 있다. 두 함수는 어떤 유용한 계산을 수행한 후 결과를 반환한다. suspend fun doSomethingUsefulOne(): Int { delay(1000L) // 유용한 척 return 13 } suspend fun doSomethingUsefulTwo(): Int { delay(1000L) // 유용한 척.. return 29 } 두 함수를 순서대로 부르면 어떻게 될까? 순서대로 부른다는 것은 작업의 순서가 있다는 의미가 있다. 예를 들어 첫 번째 함수의 결과값에 따라 두 번째 함수를 부를 수도, 부르지 않을 수도 있지 않겠는가? val time = measureTimeMillis { val..