2. 코루틴 실행하기

2024. 10. 10. 20:47·Coroutines

출처: 조세영님의 인프런 강의, 코틀린 코루틴 강의 완전 정복

 

runBlocking 사용해서 코루틴 만들기

  • runBlocking 함수는 이 함수를 호출한 스레드를 사용해 실행되는 코루틴을 만들어낸다.
  • runBlocking 코루틴이 종료될 때 스레드 점유가 해제된다.

 

run(실행) + Bloking(차단)

하지만 여기에서 쓰인 Blocking의 의미는 스레드 블로킹이 일어나서 스레드가 사용되지 못하는 상태를 칭하는 것이 아니다. 블로킹(차단)을 통해 다른 작업을 가능하게 해준다는 의미로 쓰인 것이다.

runBlocking을 사용하여 코루틴을 생성한 후 launch를 사용해 또 다른 코루틴을 생성할 수 있다. lauch를 통해 생성하는 이유는, 동기적인 코드와 코루틴(코루틴은 기본적으로 비동기적)을 함께 사용할 때 제어 흐름을 관리하기 위함이다.



1. runBlocking

  • runBlocking은 현재 스레드를 차단하면서 코루틴을 실행한다.
  • 이를 통해 코루틴이 완료될 때까지 메인 함수나 다른 동기적인 코드가 기다리도록 만든다.
  • 주로 메인 함수나 테스트 코드에서 코루틴을 호출할 때 사용된다.

 

2. launch

  • launch는 비차단 방식으로 새로운 코루틴을 실행한다.
  • 즉, 부모 코루틴(여기서는 runBlocking)은 자식 코루틴이 끝나기를 기다리지 않고 바로 다음 명령어로 넘어간다.
  • 하지만 runBlocking이 사용되면 결국 부모 코루틴이 완료될 때까지 메인 스레드가 차단되므로, 최종적으로는 모든 코루틴이 완료된다.


runBlocking내에서 launch를 사용하는 이유는 비동기적인 코루틴을 생성하면서도 그 안에서 동기적으로 코드를 제어하기 위함이다.

 


 

코루틴 디버깅 하기

1. 콘솔 로그를 사용한 디버깅

  • VM 옵션을 사용한 코루틴 정보 콘솔에 출력
  • -Dkotlinx.coroutines.debug

 

2. IntelliJ IDEA를 사용한 디버깅

  • break point를 사용하여 디버그 모드 켜기
  • break point 별로 넘기면서 코루틴을 하나씩 볼 수 있다. (코루틴의 계층화 때문)

 

3. 현업에서의 구분을 위한 코루틴 이름 부여 방법

  • 코루틴의 수가 많아지면, 디버깅 시 구분하거나 관리하기 힘들다.
  • 해당 문제를 해결하기 위해 코루틴에 특정한 이름을 부여할 수 있다.

1. 코루틴에 이름 부여하기
위 코드를 콘솔에서 출력

+ 코루틴 네이밍 관련 추가글

더보기

복잡한 상황에서 코루틴을 구분하고 디버깅과 로깅을 쉽게 하기 위해 네이밍을 사용한다.

1. Context Key 사용: 코루틴은 CoroutineContex 를 통해 실행되므로, 커스텀 키를 사용해 코루틴에 정보를 추가할 수 있다. 예를 들어, CoroutineName 이라는 키를 사용해 코루틴에 이름을 부여할 수 있다.  

// example
launch(CoroutineName("MyCoroutine")) {
       // 코루틴 로직
}

이를 통해 디버깅하거나 로그를 남길 때 해당 코루틴의 이름을 확인할 수 있다.


2. 네이밍 패턴: 코루틴이 어떤 작업을 하는지에 따라 이름을 지을 수 있다.
   -  networkRequestCoroutine: 네트워크 요청 관련 코루틴
   -  dbWriteCoroutine: 데이터베이스 쓰기 작업 관련 코루틴
   -  backgroundProcessingCoroutine: 백그라운드 처리 작업 코루틴


3. 작업 단위로 분류: 대규모 프로젝트에서 코루틴을 분류할 때,  모듈별 or  작업 단위로 코루틴 이름을 부여하는 방식이 자주 사용된다.

 

저작자표시 비영리 변경금지 (새창열림)

'Coroutines' 카테고리의 다른 글

1. 스레드 기반 작업의 한계와 코루틴의 등장  (2) 2024.10.10
'Coroutines' 카테고리의 다른 글
  • 1. 스레드 기반 작업의 한계와 코루틴의 등장
pearl.k
pearl.k
이화여대 공대, PS, 개발
  • pearl.k
    Pearl
    pearl.k
  • 전체
    오늘
    어제
    • 분류 전체보기 (53)
      • Java Spring (10)
      • Android (1)
      • Kotlin (7)
      • Coroutines (2)
      • PS 기록 (20)
        • CP (6)
        • Algorithm (6)
        • 내실 쌓기 (3)
      • CS (0)
      • IT - 취업 DB (5)
      • SSAFY (2)
        • Algorithm (1)
      • Daily (3)
      • Books (2)
      • 기타 부트캠프 기록 (0)
        • 네이버 부스트캠프 (0)
        • 우아한테크코스 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    Grand Arena Party div2
    백준 2423
    백준
    java
    sw마에스트로 코테
    채용의나라
    코딩테스트
    싸피 면접 후기
    자바@
    http stream
    액티비티컴포넌트
    싸피 12기
    앳코더309
    solved.ac
    다익스트라
    앳코더후기
    첫앳코더
    백준 13334
    싸피 서울캠
    웹모바일과정
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
pearl.k
2. 코루틴 실행하기
상단으로

티스토리툴바