본문 바로가기
728x90

공부/코틀린코루틴:딥다이브(마르친 모스카와)15

7장 - 코루틴 컨텍스트 코루틴 컨텍스트 코루틴의 동작과 관련된 여러 설정을 담고 있는 정보의 집합. 코루틴의 실행 스레드, 코루틴의 이름, 사용할 디스패처와 같은 정보를 포함할 수 있다. 코틀린에서는 코루틴컨텍스트 인터페이스를 통해 관리한다. 확장함수: 기존 클래스에 새로운 메서드를 추가할 수 있는 코틀린 기능 코루틴의 launch 함수는 CoroutineScope 인터페이스의 확장 함수로 정의되어 있습니다. 이는 CoroutineScope 인스턴스에 대해 launch 함수를 호출할 수 있다는 의미. 리시버: 확장 함수가 호출되는 대상 객체를 리시버 라고 한다. this 참조: 확장함수 내부에서는 리시버 객체를 this 키워드를 사용하여 참조할 수 있다. key를 통한 Element 식별 코루틴 컨텍스트 내의 각 Element.. 2024. 1. 29.
6장 - 코루틴 빌더 launch 빌더 launch 빌더는 새로운 코루틴을 시작하고, 결과를 반환하지 않습니다(Unit을 반환). 주로 병렬 작업을 수행할 때 사용하며, 작업이 완료될 때까지 기다리지 않습니다. launch로 시작된 코루틴은 부모 코루틴의 생명주기에 연결되어 부모가 취소되면 자식도 취소됩니다. runBlocking 빌더 runBlocking은 현재 스레드를 블록하고 코루틴이 완료될 때까지 기다립니다. 주로 테스트나 메인 함수에서 코루틴 코드를 실행하기 위해 사용됩니다. runBlocking 내부에서는 다른 코루틴을 시작할 수 있으며, 내부 코루틴이 모두 완료될 때까지 기다립니다. async 빌더 async 빌더는 코루틴을 시작하고 Deferred 타입의 결과를 반환합니다. 반환된 Deferred 객체를 통해 .. 2024. 1. 29.
4장 - 코루틴의 실제 구현 중단 함수는 함수가 시작할 때와 중단 함수가 호출되었을 때 상태를 가진다는 점에서 상태 머신과 비슷합니다. 상태머신: 코루틴의 실행 과정은 내부적으로 상태 머신으로 변환됩니다.코루틴은 여러 상태(예: 시작, 중단, 재개, 완료)를 가질 수 있으며, 이러한 상태는 코루틴의 생명주기를 관리 한다. 컨티뉴에이션 객체는 상태를 나타내는 숫자와 로컬 데이터를 가지고 있다. 함수의 컨티뉴에이션 객체가 이 함수를 부르는 다른 함수의 컨티뉴에이션 객체를 장식합니다. 그 결과, 모든 컨티뉴에이션 객체는 실행을 재개하거나 재개된 함수를 완료할 때 사용되는 콜 스택으로 사용됩니다. 컨디뉴에이션 전달 방식 중단 함수가 구현될 수 있는 수많은 방법 중에서 코틀린 팀은 컨티뉴에이션 전달 방식을 택함. 컨티뉴에이션은 코루틴이 중단.. 2024. 1. 14.
3장 - 중단은 어떻게 작동할까? 중단 함수는 코틀린 코루틴의 핵심이다. 코루틴은 중단되었을 때 Continuation 객체를 반환한다. 중단했을 때 어떤 자원도 사용하지 않는다 실행이 중지 되어있을 때 스레드를 차지하지 않아 다른 작업에 스레드를 할당할 수 있다는 뜻. delay - 중단 코루틴의 실행을 지정된 시간 동안 일시적으로 중단하는 데 사용된다. delay(timeInMillis) 함수는 매개변수(ms) 단위로 현재 코루틴을 중단하며 시간이 지나면 자동으로 다시 시작된다. 비블로킹 특성을 가진다. 스레드를 차단하지 않는다. 코루틴은 일시 중단되지만, 그 로쿠틴이 실행되고 있던 스레드는 다른 작업을 계속 수행할 수 있다. 지정된 시간이 지난 후에는 중단되었던 지점에서 실행을 재개하는데, 이과정은 코루틴의 컨티뉴에이션 매커니즘을 .. 2024. 1. 13.
2장 - 시퀀스 빌더 코틀린 시퀀스는 데이터를 연속적으로 처리하는 데 사용되는 컬렉션 타입 중 하나 요구되는 연산을 최소한으로 수행 무한정이 될 수 있음 메모리 사용이 효율 시퀀스 좀 알고 갈까 리스트를 사용할 경우 val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) val result = mutableListOf() for (number in numbers) { if (number % 2 == 0) { val squared = number * number result.add(squared) } } println(result) // [4, 16, 36, 64, 100] 위 코드는 리스트를 사용하여 짝수를 찾고 제곱한 값을 구합니다. 중간 결과를 담을 result 리스트를 생성하고, 반.. 2024. 1. 13.
1장 - 코틀린 코루틴을 배워야 하는 이유 스레드 사용의 비용: 스레드를 사용하는 데는 자원이 많이 소모된다. 스레드는 운영 체제 수준에서 관리되며, 스레드를 생성하고 관리하는 데 필요한 오버헤드가 존재한다. 자바에서 Thread.sleep의 비용: Thread.sleep() 을 사용하면 해당 스레드는 정해진 시간 동안 실행을 멈추고 다른 스레드가 실행될 수 있게 한다. 이 과정에서도 스레드는 계속 자원을 점유하고 있으며, 컨텍스트 스위칭에도 비용이 발생한다. 코루틴의 중단과 재개: 코루틴은 스레드와 다르게 작동한다. 필요에 따라 실행을 중단(suspend)하고, 재개(resume)할 수 있다. 이 과정에서 코루틴은 스데르를 잠들게 하지 않고, 실행 중인 스레드를 활용하여 다른 작업으로 전환할 수 있다. 이러한 특성으로 인하여 컨텍스트 비용을 줄.. 2024. 1. 13.
728x90