반응형 coroutine 반응형 5 [Coroutine] 코루틴 Dispatcher 사용 경험과 내부 동작 리뷰 Reactive 환경에서의 최적화하기 실무 개발하면서 내부 서버 최적화 그리고 코드 리뷰 및 로직 리뷰를 진행하면서 팀원 간 의견 공유 그리고 테스트 진행 결과를 남겨 보려고 한다. 코루틴 Dispatcher는 크게 세 가지로 나뉜다.MainDefault (공식 문서)기본 쓰레드 수 = CPU 코어 수 × 2IO (공식 문서)최대 쓰레드 수 = 64개 (기본값) 우선 coroutine을 spring boot 기반 백엔드 개발을 진행하므로 Main은 사용하지 않고 Default, IO 이 두가지를 사용하고 있다. Dispatcher.IO를 쓰는 이유로는 외부 IO 호출시 데이터를 받아올 때 까지 CPU를 거의 사용하지 않고, 결과를 기다리는 동안 스레드를 점유하기 때문이다.이에 CPU를 쓰지 않고 대기하는 작업은 CPU 중심 디스패처(Disp.. 2025. 7. 25. [Coroutine] 코루틴 빌더 간단 정리 runBlocking -> 코루틴을 생성하는 코루틴 빌더 runBlocking으로 감싸진 코드는 수행이 끝날 때까지 해당 쓰레드가 Blocking된다. (main쓰레드는 아니다!) 비동기로 동작하는 것이 아니라서 자주 쓰이진 않는다. 꼭 사용해야 하는 경우 라이브러리 또는 프레임워크에서 코루틴을 지원하지 않을 때 launch -> 쓰레드 차단 없이 새 코루틴을 생성하고 결과를 job이라는 객체로 반환, 비동기로 동작한다. job은 lauch 내 상태를 확인하거나 시작 취소 시킬 수 있다 Ex. job.start(), job.cancel()을 통해 해당 비동기 로직을 제어할 수 있다. lauch는 동작을 뒤로 미룰 수 있다. launch(start=CoroutineStart.LAZY) { } -> 실행하는.. 2023. 1. 12. [Coroutine] Composing Suspending Functions 이번에는 suspending 함수의 구성에 대해 정리하고자 한다. 1) 비동기함수의 순차적 실행 fun main() = runBlocking { val time = measureTimeMillis { val one = doSomethingUsefulOne() val two = doSomethingUsefulTwo() println("The answer is ${one + two}") } println("Completed in $time ms") } suspend fun doSomethingUsefulOne() : Int { println("doSomethingUsefulOne") delay(2000L) // 뭐 어떤 DB 호출이나 외부 통신에 걸리는 로직이 들어갈 것이다. return 13 } suspe.. 2022. 9. 2. [Coroutine] Coroutine Cancellation And Timeout 지난번 장에서는 코루틴은 Builder로 생성해보는 것까지 진행하였다. 이번장에서는 코루틴 종료하는 2가지 방법 1) Cacellation 2) Timeout 에 대해 정리해보고자 한다. Cacellation 즉 코루틴이 종료 되기 위해서는 다음과 같은 세가지 조건을 만족해야 한다. 코루틴이 취소 되기 위해서는 다음과 같이 협조적이어야 한다. 코루틴 코드가 cancellable 해야 한다 suspend 함수는 취소 가능하다 이에 다음과 같은 예시를 코드로 작성해보고 테스트 해보자. join 객체의 cacel 함수 호출 join 객체의 cacel 함수 호출, But suspend 함수가 없다면? suspend 함수가 아닌 상태체크로 Cancel finally로 코루틴 종료 NonCancellable로 종.. 2022. 8. 29. [Coroutine] Coroutine Basic 인프런에 코루틴을 검색해보니 다음과 같은 강좌가 있어 공부겸해서 블로그에 정리해보려고 한다. https://www.youtube.com/c/%EC%83%88%EC%B0%A8%EC%9B%90 새차원새차원의 코틀린 강좌 입니다. http://blog.naver.com/cenodimwww.youtube.com 1. 코루틴 (Co+ routine) 으로 루틴의 일종이다. (안드로이드 앱 개발은 kotlin으로 진행되는데 안드로이드 앱 쓰레드 개념을 보면 UI Thread가 메인 쓰레드이며 이 쓰레드 외에는 UI를 제어 할 수 없다. UI Thread 외 다른 기능이 동시에 필요하다면 AsynTask를 이용하거나(Deprecated 된 것으로 알고 있음) Sub Thread 또는 Handler를 활용하여 이 결.. 2022. 8. 23. 이전 1 다음