일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준
- 코루틴
- textfield
- TEST
- Codeforces
- 쿠링
- androidStudio
- ProGuard
- Gradle
- Coroutine
- 암호학
- Kotlin
- architecture
- relay
- GitHub
- MyVoca
- Rxjava
- 코드포스
- android
- boj
- pandas
- 프로그래머스
- MiTweet
- Compose
- AWS
- Hilt
- activity
- livedata
- Coroutines
- Python
- Today
- Total
목록Primary (163)
이동식 저장소
목차 Channel Channel 종료 Producer-Consumer 패턴 파이프라인 분산처리 역(逆) 분산처리 Buffered Channels Channel은 평등하다 Ticker Channel Flow와 Channel의 차이 Deferred를 사용하여 코루틴 간에 하나의 값을 전달할 수 있다. 여러 개의 값을 전달할 때는 channel을 사용할 수 있다. Channel Channel은 개념상 BlockingQueue와 매우 비슷하다. 차이점이 있다면 BlockingQueue는 값을 전달하는 과정에서 스레드를 block하지만, Channel은 스레드를 block하지 않고 suspending 한다. val channel = Channel() launch { for (x in 1..5) channel.s..
suspending 함수를 이용하여 비동기적으로 값을 계산할 수 있다. 그런데 비동기적으로 계산되는 값이 여러 개라면 어떻게 할까? 예를 들어 1번부터 n번째까지의 피보나치 수를 1초에 하나씩 계산해서 반환하는 함수가 있다고 하자. 물론 모든 결과가 계산될 때까지 기다리는 방법도 있지만, 결과값이 반환될 때마다 하나씩 출력하는 것이 성능 측면에서 더 좋을 수 있다. 코틀린의 Flow를 이용하여 비동기적으로 계산된 값을 하나씩 받을 수 있다. 컬렉션 복습 collections을 이용하여 여러 개의 값을 표현할 수 있다. 다음의 코드에서 simple 함수는 세 개의 정수로 이루어진 List를 반환한다. fun simple(): List = listOf(1, 2, 3) fun main() { simple()...
목차 Dispatcher와 스레드 Unconfined vs. confined 코루틴과 스레드 디버깅 IntelliJ IDEA에서 디버깅 로그로 확인하기 코루틴에 이름 붙이기 문맥 조합하기 스레드 간 이동 Job 확인하기 부모-자식 관계 부(모)성애 정리: 코루틴 스코프 참고문헌 코루틴은 항상 CoroutineContext 문맥 안에서 실행된다. 코루틴 문맥에는 여러 원소가 포함되는데, 대표적인 것으로 Job과 dispatcher가 있다. Dispatcher와 스레드 코루틴 문맥에는 코루틴이 어느 스레드에서 동작할지를 결정하는 CoroutineDispatcher가 포함된다. dispatcher는 코루틴이 특정 스레드에서 실행되도록 할 수도 있고, 스레드 풀에서 실행되도록 할 수도 있고, 또는 어느 스레드에..
다양한 suspending 함수를 조합해 보자. 순차적으로 실행된다 다음의 두 suspending 함수가 있다. 두 함수는 어떤 유용한 계산을 수행한 후 결과를 반환한다. suspend fun doSomethingUsefulOne(): Int { delay(1000L) // 유용한 척 return 13 } suspend fun doSomethingUsefulTwo(): Int { delay(1000L) // 유용한 척.. return 29 } 두 함수를 순서대로 부르면 어떻게 될까? 순서대로 부른다는 것은 작업의 순서가 있다는 의미가 있다. 예를 들어 첫 번째 함수의 결과값에 따라 두 번째 함수를 부를 수도, 부르지 않을 수도 있지 않겠는가? val time = measureTimeMillis { val..
코루틴 취소하기 코루틴을 취소해야 할 경우가 있다. 예를 들어 어떤 페이지가 열려 있을 때 작동하는 코루틴이 있는데, 사용자가 그 창을 닫았다고 해 보자. 창이 닫혔으므로 코루틴은 더 이상 작동할 필요가 없으며 (따라서) 중지하는 것이 바람직하다. launch 메소드가 반환하는 Job 객체를 이용하여 코루틴을 제어할 수 있다. val job = launch { repeat(1000) { i -> println("job: I'm sleeping $i ...") delay(500L) } } delay(1300L) println("main: I'm tired of waiting!") job.cancel() // job 취소 job.join() // job이 완전히 취소될 때까지 기다림 println("main..