일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Network
- 완전탐색
- 위상정렬
- 백준
- dfs
- 알고리즘
- 수학
- 그리디
- java
- 스택
- Kotlin
- 에라토스테네스의 체
- mst
- 구현
- 문자열
- 투 포인터
- 세그먼트 트리
- JUnit 5
- swea
- 백트래킹
- 시뮬레이션
- 이분탐색
- Effective Java
- 프로그래머스
- 플로이드-와샬
- 유니온 파인드
- 후니의 쉽게 쓴 시스코 네트워킹
- BFS
- 동적계획법
- CS
목록Kotlin (15)
반갑습니다!
코루틴에는 Coroutine Context와 Dispatcher라는 것이 있다. 이번엔 그것들에 대해서 알아보자. Dispatchers and Threads 코루틴은 기본적으로 Coroutine Context 실행되는데, Context 요소 중에는 Dispatcher가 있다. 그리고 이 Dispatcher라는 것은 코루틴이 어떤 쓰레드에서 실행될지를 결정해준다. runBlocking, launch , async 등의 코루틴 빌더 함수에는 Courinte Context를 매개변수로 전달해줄 수 있다. import kotlinx.coroutines.* fun main() ..
코루틴이 쓰레드를 대체할 수 있다는 것은 앞의 예제들을 학습하면서 알 수 있었다. 이번에는 코루틴이 실제로 어떻게 동작하는 것인지 알아보도록 하자. CPS (Continuation Passing Style) 코루틴은 컴파일러에 의해서 CPS (Continuation Passing Style)로 변환된다. fun postItem(item: Item) { val token = requestToken() val post = createPost(token, item) processPost(post) } 이런 형태의 코드가 있다고 하자. 이 코드는 내부적으로 다음과 같은 코드로 변환된다. fun postItem(item: Item) { requestToken { token -> val post = createPo..
이번엔 suspend 함수들을 어떻게 활용해야할지 알아보자 Sequential by default 네트워크로부터 데이터를 전송받거나 복잡한 연산을 하는 등의 비동기 처리가 필요한 작업을 수행한다고 가정해보자. 그리고 그러한 비동기 작업들을 순차적으로 수행하고 싶다면 어떻게 해야할까? 코루틴은 기본적으로 순차적으로 실행된다. 그렇기에 비동기 작업을 순차적으로 실행하는 경우 아래와 같이 코드를 작성할 수 있다. import kotlinx.coroutines.* import kotlin.system.* fun main() = runBlocking { val time = measureTimeMillis { val one = doSomethingUsefulOne() val two = doSomethingUsefu..
Cancelling coroutine execution 이번엔 코루틴을 멈추는 방법을 알아보자. 이전의 예제들을 보면서 launch 를 통해 Job객체를 반환받을 수 있음을 알았다. 코루틴을 멈추는 방법은 반환받은 Job 객체에 구현된 cancel() 함수를 실행하는 것이다. import kotlinx.coroutines.* fun main() = runBlocking { val job = launch { repeat(1000) { i -> println("job: I'm sleeping $i ...") delay(500L) } } delay(1300L) // 1300ms동안 기다리기 println("main: I'm tired of waiting!") job.cancel() //job 취..
Your first coroutine import kotlinx.coroutines.* fun main() { GlobalScope.launch { // 백그라운드에서 새로운 코루틴 실행 delay(1000L) // 1초간 논블로킹 딜레이 println("World!") } println("Hello,") // 코틀린이 지연되는 동안 메인 쓰레드 실행 Thread.sleep(2000L) // 2초 동안 프로그램이 살아있음 } /* 실행결과 Hello, World! */ 위 코드를 실행해보면 쓰레드를 실행한 것처럼 동작함을 알 수 있다. 여기서 GlobalScope로 생성된 블럭을 'Coroutine Scope' 라고 한다. 그리고 launch를 통해 코루틴을 실행시키는데, 이러한 역할을 하는 것을 'Co..