일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 정보처리기사실기 기출문제
- AWS EKS
- 오블완
- AI
- 공부
- CloudWatch
- minikube
- Spring
- MySQL
- kotlin querydsl
- kotlin spring
- APM
- CKA 기출문제
- PETERICA
- 기록으로 실력을 쌓자
- aws
- Pinpoint
- Kubernetes
- Elasticsearch
- IntelliJ
- 티스토리챌린지
- CKA
- Java
- kotlin
- Linux
- mysql 튜닝
- kotlin coroutine
- 정보처리기사 실기 기출문제
- 정보처리기사 실기
- 코틀린 코루틴의 정석
- Today
- Total
목록Programming/Kotlin (69)
피터의 개발이야기
ㅁ 들어가며ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다.11장 코루틴의 심화 - 무제한 디스패처(Unconfined Dispatcher)ㅇ 무제한 디스패처는 코루틴을 자신을 실행시킨 스레드에서 바로 실행되도록 한다.ㅇ 호출된 스레드와 상관없기 때문에 무제한적으로 실행하기 때문에 무제한 디스패처라고 부른다. 자신을 실행 시킨 스레드에서 즉시 실행fun main() = runBlocking { val startTime = System.currentTimeMillis() // Dispatchers.Unconfined 사용 launch(Dispatchers.Unconfined) { println("[${Thread.currentThread().name}][${getRunTime(startTi..
ㅁ 들어가며ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다.11장 코루틴의 심화 - Coroutine의 내부동작 원리ㅇ Coroutine의 동작 원리는 작업의 중단과 재시작에 방식에 있다.ㅇ 이 주제에 관해서는 [JAVA] JDK21, Virtual Thread, Continuation에 대한 이해에서 이야기를 하였다. ㄴ Coroutine의 비동기의 핵심은 작업의 중단 및 재시작하는 runContinuation 작업이다. ㄴ Continuation을 더 깊이 이해하기 위해서는 LockSupport.park로 기존 스레드의 중지 재시작 메커니즘을 이해해야한다. Continuation Passing Styleㅇ 코틀린의 내부동작 원리인 코루틴의 일시 중단과 재개를 위해 Continuation 객..
ㅁ 들어가며ㅇ 코루틴의 디버깅을 하기 위해서는 코루틴의 Job, Dispatchers, Context 정보를 확인해야 한다.ㅇ 비동기처리를 위한 다양한 코루틴의 방식을 이해하기 위해서 필요한 기본 정보를 출력할 수 있어야 한다.ㅇ 이를 위한 디버깅 방법을 정리하였다. ㅁ 기본 디버깅 방법: Debuging Mode fun main() = runBlocking { println("[${Thread.currentThread().name}] 디버깅 테스트")}/*[main] 디버깅 테스트 */ㅇ 메인 스레드의 이름만 나올 뿐 Coroutine의 내용을 확인하기 어렵다. ㅇ 실행 시 Debug 모드로 실행ㅇ Coroutine의 Job과 Dispatcher를 확인할 수 있다. ㅁ 코루틴의 디버깅 옵션 설정: ..
ㅁ 들어가며ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다.11장 코루틴의 심화 - CoroutineScope의 start 옵션ㅇ launch나 async 코루틴 빌더 함수에 CoroutineStart옵션을 지정하여 다양한 코루틴의 실행 방법을 지정할 수 있다. ㅇ CoroutineStart 옵션 ㄴ CoroutineStart.DEFAULT ㄴ CoroutineStart.LAZY ㄴ CoroutineStart.ATOMIC ㄴ CoroutineStart.UNDISPATCHED ㅁ CoroutineStart.DEFAULTㅇ launch의 start의 기본 값은 DEFAULT이다. fun main() = runBlocking { val startTime = System.currentTimeMill..
ㅁ 들어가며ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다.11장 코루틴의 심화 - 비동기 다중 스레드의 공유 데이터 정합성 문제 대량 트래픽을 다루는 비동기 시스템에서 프로세스의 경합으로 인해 데이터의 충돌이 발생하는 경우가 종종 있다. 예를 들어 30초후 종료처리해야하는 프로세스와 완료 결과를 받아 정상종료하는 두 모듈이 1ms 미만에 동일 시점에 프로세스가 시작되는 경우 경합이 발생하게 된다. 스레드 간의 공유 데이터도 이와 비슷한 문제점을 지니고 있다. 아래의 소스는 만번의 카운트를 다중 스레드로 처리하는 로직이다. fun main() = runBlocking { val startTime = System.currentTimeMillis() withContext(Dispatchers.IO..
ㅁ 들어가며ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다.10장 코루틴의 이해- 루틴, 서브루틴, 코루틴의 이해- 코루틴의 스레드 양보- 고정적이지 않은 코루틴의 실행 스레드 ㅁ 서브루틴과 코루틴ㅇ 서브루틴은 함수 안에서 호출되는 함수를 말한다. ㅇ 일반적으로 루틴이라는 단어는 '특정한 일을 처리하는 과정'을 의미한다. ㅇ 프로그래밍에서는 루틴을 '특정한 일을 처리하기 위한 일련의 명령'을 의미하며, 이런 명령을 함수 또는 메서드라고 한다. fun main() = runBlocking { val startTime = System.currentTimeMillis() //메인 루틴 routine(startTime)}fun routine(startTime:Long) { println("[${Thr..
ㅁ 들어가며ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다.9장 일시 중단 함수- 일시중단함수의 개념 - 일시중단함수 사용법- 일시중단함수에서 코루틴을 실행하는 방법- 일시중단함수의 호출지점 ㅁ 일시중단함수란?fun main() = runBlocking { val startTime = System.currentTimeMillis() delayAndPrint(startTime) delayAndPrint(startTime)}// 일시 중단 함수 생성suspend fun delayAndPrint(startTime:Long) { delay(1000L) println("[${Thread.currentThread().name}] [${getElapsedTime(startTime)}] 일시 중단 함수 ..
ㅁ 들어가며ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다. 8장 예외 처리- 예외전파 방식- 예외전파의 제한- 예외를 CoroutineExcetionHandler 처리- try catch문을 이용한 예외처리- async를 통해 생성된 코루틴의 예외처리방법- 전파되지 않는 예외 ㅁ 예외전파 방식fun main() = runBlocking { launch(CoroutineName("작업1")) { launch(CoroutineName("작업1-1")) { delay(100L) throw Exception("작업1-1 예외 발생") } delay(100L) println("[${Thread.currentThread().name}] 작업1 실행") } launc..
ㅁ 들어가며ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다. ㅁ 비구조적 동시성의 한계ㅇ 책에서 설명하는 구조화된 동시성을 이해하기 위해서는 비구조적 동시성의 한계를 우선 알아야 한다. ㅇ 작업의 단위가 단편적인 경우도 있지만, 상호의존적인 여러 개의 하위 작업들로 나누어지는 경우가 있다. 예전에는 이를 단일 스래드로 순차적으로 처리하면서 에러 발생 시 Exception처리를 하고 종료를 하면 큰 문제가 발생하지 않았다. ㅇ 하지만 고가용적인 방식으로 각각의 작업이 비동기로 서로 독립적으로 수행하면 전체적인 작업은 빠르게 병렬처리되지만 제어권이 개별적으로 있어 에러헨들링은 어렵게 되었다. ㅁ 구조적 동시성의 개념과 필요성ㅇ 구조적 동시성(Structured Concurrency)이란 부모 작업과 하위..
ㅁ 들어가며ㅇ 코틀린 코루틴의 정석 책을 보고 정리한 글입니다. 6장 CorotineContextCoroutine Context는 코루틴을 실행하는 실행환경을 설정하고 관리하는 인터페이스로 CoroutineContext 객체는CoroutineDispatcher, CoroutineName, Job 등의 객체를 조합해 코루틴의 실행환경을 설정한다. 코루틴을 실행하고 관리하는 핵심적인 역할을 하며, 코루틴의 실행과 관련된 모든 설정은 CoroutineContext객체를 통해 이뤄진다. - CoroutineContext 구성 요소- CoroutineContext 구성 방법- CoroutineContext 구성 접근- CoroutineContext 구성 제거 ㅁ CoroutineContext 구성 요소Coro..