Kotlin 문법: 쓰레드와 코루틴

SHY(code poet)·2024년 3월 13일

✨Kotlin에 관하여✨ 

목록 보기
33/36
post-thumbnail

● 쓰레드와 코루틴 ⇒ 동시성 프로그래밍을 위한 기술

(쓰레드나 코루틴은 각자의 방법으로 동시성을 보장하는 기술이다. 코루틴은 Thread를 대체하는 기술은 아니다. 하나의 Thread를 더욱 잘개 쪼개서 사용하는 기술.
코루틴은 쓰레드보다 CPU 자원을 절약하기 때문에 Light-Weight Thread라고 한다.
구글에서는 코틀린의 코루틴 사용을 적극 권장하고 있다.
⇒ 프로세스>쓰레드>코루틴)

① “스위칭”이 중요한 개념이다. (정보 교환)
https://ko.wikipedia.org/wiki/%EB%AC%B8%EB%A7%A5_%EA%B5%90%ED%99%98

② 쓰레드
ⓐ 작업 하나하나의 단위 : Thread

  • 각 Thread 가 독립적인 Stack 메모리 영역을 가진다

ⓑ 동시성 보장 수단 : Context Switching (OS관여)

  • switching 되는 동기적 상황에서도 운영체제 커널에 의한 Context Switching 을 통해 동시성을 보장
  • 블로킹 (Blocking)
    - Thread A가 Thread B의 결과를 기다리고 있다.
    - 이 때, Thread A는 블로킹 상태라고 할 수 있다.
    - A는 Thread B의 결과가 나올 때 까지 해당 자원을 사용하지 못한다.
    ![](https://velog.velcdn.com/images/godbs225/post/b63312a3-ea69-4799-ad8b-15aef311ab31/image.png)

③ 코루틴
ⓐ 작업 하나하나의 단위 : Coroutine Object
- 여러 작업 각각에 [Task] Object를 할당
- Coroutine Object도 엄연한 객체이기 때문에 JVM Heap에 적재 (코틀린 기준)
(객체를 만들면 특정 메모리에 적재한다.)
ⓑ 동시성 보장 수단 : Programmer Switching (No-Context Switching) (OS관여 X)
- 프로그래머들이 소스 코드를 통해 Switching 시점을 마음대로 정할 수 있다.
- Suspend (Non-Blocking)
- Object 1이 Object 2의 결과를 기다릴 때 Object 1의 상태는 Suspend로 바뀜
- Object1 은 블록킹 되어도 Object 1을 수행하던 Thread는 그대로 유효(코루틴 차원이기 때문)
- 그래서 Object 2도 Object 1과 동일한 Thread에서 실행된다.

    ![](https://velog.velcdn.com/images/godbs225/post/5f1ada45-21e6-48a7-9555-a295da07eacd/image.png)

    
profile
진정한 개발자는 코드를 두려워하지 않는다. 오히려 코드가 그를 두려워한다.

0개의 댓글