본문 바로가기

cs(with 매일메일)

[260319목] 어떤 이유로 코루틴을 사용한 작업 처리가 기존 스레드 방식보다 가벼운지 설명해주세요

* 코루틴(Coroutines) : 코틀린에서 제공하는 기능으로 비동기 작업을 효율적으로 처리하기 위해 설계된 경량화된 동시성 처리 방식

  - 작업을 일시 중단(suspend)하고 나중에 재개할 수 있으며 매우 적은 자원을 사용

  - I/O작업이 많은 시스템에서 특히 효과적

  - 협력적 멀티태스킹을 지원하여 코루틴 자체가 자발적으로 작업을 일시 중단하고 다른 작업에 CPU점유를 넘김

 

  스레드 코루틴
메모리 사용량 차이 자체 스택 메모리를 필요로 함
JVM에서 기본적으로 1MB 스택 할당
스레스 생성 ~ 종료될때까지 유지
스레드 내에서 실행
자체 스택 X
컨텍스트 스위칭 비용 OS수준
CPU 레지스터, 메모리 맵 등의 상태를 저장하고 복원하는 비용 발생
코루틴 간 전환은 OS개입 없이 사용자 공간(user space)에서 발생
실행 지점, 로컬 변수 상태만 heap 메모리에 저장
생성 및 관리 비용 커널 수준 리소스 활용 단순 객체 할당과 유사, OS리소스 직접 소비 X
일시 중단 메커니즘 블로킹 작업(I/O 등) 중에는 완전히 차단 일시 중단 지점(suspend) : 기본 스레드 해제
수 천개의 코루틴을 소수의 스레드에서 효율적으로 실행 가능

 

* 버추얼 스레드(Virtual Thread) : 자바 진영에서 도입된 기술로 기존의 스레드 모델을 경량화한 형태

  - JVM레벨에서 관리, OS의 스레드보다 훨씬 가벼움 

  - 수십만 개의 스레드를 생성

  - I/O작업 시 효율적으로 대기 상태에 들어가 시스템 자원을 적게 소보

  - 기존 자바 코드와 동일한 API를 사용해서 기존 코드에 큰 수정 없이 적용 가능