• 목록 (128)
    • Android (62)
    • Back-End (2)
    • Java (3)
    • Kotlin (16)
    • CS (7)
    • 개발 서적 (12)
    • 문제 풀이 (26)

최근 글

티스토리

전체 방문자
오늘
어제
hELLO · Designed By 정상우.
MJ_94
Kotlin

[Kotlin] 스레드와 코루틴

[Kotlin] 스레드와 코루틴
Kotlin

[Kotlin] 스레드와 코루틴

2022. 5. 12. 16:57

스레드와 코루틴은 동시성을 보장하고, 비동기 작업을 하기 위해 많이 사용된다는 공통점이 있다.

  •  동시성은 말그대로 여러가지 작업을 한번에 수행하는 것이지만, 실제 동작은 시분할 기법을 활용하여 여러 작업들을 조금씩 나누어 번갈아가며 실행기때문에 사용자입장에서는 여러 작업이 동시에 일어나는것처럼 느껴지게 된다.
  • 비동기 작업은 특정 작업을 수행할 때 작업이 끝날 때까지 기다리지 않고 다른 작업을 수행할 수 있는 특징이 있다.


그런데, 스레드와 코틀린은 근본적으로 큰 차이점이 존재한다.

스레드는 각 Task에 해당하는 Stack메모리를 할당받고 동시에 여러 작업을 수행할때 OS는 어떤 스레드 작업을 먼저 수행해야 효율적인지에 대한 스케쥴링(선점 스케쥴링)을 한다.

Task 단위는 Thread이며 JVM의 Stack 메모리 영역을 차지하며 Context Switching을 통해 동시성을 보장한다.

Thread A, B가 있다고 가정했을 때 Thread A가 Thread B의 결과가 나오기까지 기다려야 한다면 Thread A는  Blocking 되어 그 시간만큼 자원을 사용하지 못한다.


코루틴은 경량 스레드라고도 불리며, 작업 하나하나를 효율적으로 분배하여 동시성을 분배하는 것을 목표로 한다.

Task 단위는 Object이며 JVM의 Heap 영역에 적재되고 개발자의 임의대로 Object를 Switching 하여 Context Switcing 비용을 더욱 줄였다.

또한 Object A가 Object B의 결과가 나오기까지 대기해야 한다면 Object A는 정지(suspend)되고 Object B을 수행하는 Thread는 여전히 유효하기 때문에 Object B의 작업도 Object A와 동일한 Thread에서 실행될 수 있고 자원의 할당도 여전히 그대로이기 때문에 Non-Blocking이다.

또한 코루틴의 작업단위는 위에서 말한대로 Object의 단위로 축소되면서 하나의 스레드에서 여러개의 코루틴을 처리할 수 있기에 여러개의 스레드가 생성되지 않아도 되고 메모리 낭비, Context Switcing 등 비용 낭비를 할 필요가 없다.

그렇다고 Coroutine이 Thread의 향후 대안까진 아니고 기존의 Thread에서 좀 더 프로그래머의 의도대로 효율성을 증가시키는 동시성 보장 기법이다.

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

'Kotlin' 카테고리의 다른 글

[Kotlin] runCatching  (0) 2022.12.19
[Kotlin] CoroutineBuilder  (0) 2022.05.12
[Kotlin] Object  (0) 2022.03.25
[Kotlin] Delegated Properties  (0) 2022.03.23
[Kotlin] Delegation  (0) 2022.03.22
    'Kotlin' 카테고리의 다른 글
    • [Kotlin] runCatching
    • [Kotlin] CoroutineBuilder
    • [Kotlin] Object
    • [Kotlin] Delegated Properties
    MJ_94
    MJ_94
    안드로이드, 개발 관련 기술 블로그

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.