본문 바로가기
728x90

공부158

9장 - 취소 코틀린 코루틴에서 아주 중요한 기능 중 하나는 바로 취소(cancellation) 이다. 기본적인 취소 Job 인터페이스는 취소하게 하는 cancel 메서드를 가지고 있습니다. cancel 메서드를 호출하면 다음과 같은 효과를 가져올 수 있다. 호출한 코루틴은 첫 번째 중단점에서 잡을 끝냅니다. 잡이 자식을 가지고 있다면, 그들 또한 취소됩니다.하지만 부모는 영향을 받지 않는다. 잡이 취소되면, 취소된 잡은 새로운 코루틴의 부모로 사용될 수 없다. 취소된 Job 은 Cancelling 상태가 되었다가 Cancelled 상태로 바뀝니다. @Test fun `98페이지`() { runBlocking { val job = launch { repeat(1_000) { i -> delay(200) println(.. 2024. 2. 5.
8장 - 잡과 자식 코루틴 기다리기 자식은 부모로부터 컨텍스트를 상속받습니다. 부모는 모든 자식이 작업을 마칠 때까지 기다립니다. 부모 코투린이 취소되면 자식 코루틴도 취소됩니다. 자식 코루틴에서 에러가 발생하면, 부모 코루틴 또한 에러로 소멸합니다. Job 이란? 시작된 코루틴에 대한 핸들로 사용된다. launch 코루틴 빌더는 Job 객체를 반환하고, 이 객체를 사용하여 코루틴이 완료될 때까지 대기하거나 코루틴의 상태를 관리할 수 있다. 코루틴 빌더는 부모의 잡을 기초로 자신들의 잡을 생성한다. 모든 코루틴 빌더는 자신만의 잡을 생성합니다. 대부분의 코루틴 빌더는 잡을 반환하므로 어느 곳에서든 사용할 수 있습니다. launch 의 명시적 반환 타입이 Job 이라는 사실을 통해 확인할 수 있습니다. Job 은 코루틴이 상속하지 않는 유일.. 2024. 1. 29.
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.
개발자를 위한 레디스 - 1 String 키:값 저장시 string 512MB 의 문자열 데이터를 저장할 . 수있으며, 이진 데이터를 포함하는 모든 종류의 문자열이 binary-safe 하게 처리되기 때문에 JPEG 이미지와 같은 바이트 값, HTTP 응답값 등의 다양한 데이터를 저장하는 것도 가능. binary-safe 문자열이란? 데이터 손실없이 null 바이트를 포함한 모든 바이트 시퀀스를 저장, 처리 조작할 수 있는 문자열 처리 방식이다. text, number, binary data 등을 인코딩 걱정 없이 저장할 수 있다는 것을 얘기 list list 에는 최대 42억여 개의 아이템을 저장할 수 있다. sorted Set 스코어에 따라 정렬되는 고유한 문자열의 집합 list 와 sorted set 모두 순서를 갖는 자료 구.. 2023. 11. 28.
728x90