최근 수정 시각 : 2024-01-08 03:40:55

코루틴

Asyncio에서 넘어옴

1. 개요2. 스레드와의 관계3. 프로그래밍 언어4. 코루틴을 지원하는 언어

1. 개요

코루틴은 서브 루틴을 일시 정지하고 재개할 수 있는 구성 요소를 말한다. 쉽게 말해 필요에 따라 일시 정지할 수 있는 함수를 말한다.

코루틴을 사용하여 I/O 처리를 극대화할 수 있는데, 이는 단순히 대기하는 작업을 기다리는 동안 다른 작업을 먼저 처리함으로써 CPU의 유휴 시간(Idle time)을 최소화 할 수 있기 때문이다. 코루틴은 멀티쓰레드를 대체하기 위해 등장한 것은 아니다.

2. 스레드와의 관계

스레드는 프로세스 내에서 실행되는 흐름의 단위를 말한다. 그리고 코루틴은 (일시) 정지 가능한 함수로써, 기본적으로 하나의 스레드를 가진다. 따라서 직접적인 관계는 없다.

3. 프로그래밍 언어

Go는 언어 차원에서 스레드와 코루틴을 혼합한 '고루틴'이라는 새로운 기능을 제공한다. 여러 스레드에서 코루틴이 한꺼번에 실행된다. 기존의 운영체제가 제공하는 스레드보다 작고 빠른 경량 스레드 개념이며 스레드처럼 동시에 실행할 수 있다.

4. 코루틴을 지원하는 언어

  • C++ : C++20에 stackless coroutine이 추가되었다.
  • Rust : 2018 에디션에서 코루틴 관련 문법과 트레이트를 지원한다. 다만, 실행자를 별도로 구현하거나 라이브러리를 사용해야 한다.
  • Go
  • 자바스크립트 : ES6이 제정되기 이전에는 AJAX, 콜백을 사용해 비동기를 구현했다. ES6부터 Promise라는 객체가 등장하였으며, async, await 키워드로 가독성이 더 좋아졌다.
  • PHP : 5.5부터 지원된다.
  • C# : 2.0부터 지원된다.
  • 코틀린 : 1.3부터 지원된다.
  • 파이썬 : Asyncio라는 기본 내장 라이브러리를 통해 3.5부터 지원된다. #
  • 루아 : 언어의 여덟가지 기본 type 중 하나로 코루틴이 제공된다.[1]

[1] type 명칭은 thread인데, 그 내용은 coroutine