[[분류:프로그래밍 이론]] [목차] == 개요 == 코루틴은 서브 루틴을 일시 정지하고 재개할 수 있는 구성 요소를 말한다. 쉽게 말해 필요에 따라 일시 정지할 수 있는 함수를 말한다. 코루틴을 사용하여 I/O 처리를 극대화할 수 있는데, 이는 단순히 대기하는 작업을 기다리는 동안 다른 작업을 먼저 처리함으로써 CPU의 유휴 시간(Idle time)을 최소화 할 수 있기 때문이다. 코루틴은 멀티쓰레드를 대체하기 위해 등장한 것은 아니다. == [[스레드]]와의 관계 == 스레드는 프로세스 내에서 실행되는 흐름의 단위를 말한다. 그리고 코루틴은 (일시) 정지 가능한 함수로써, 기본적으로 하나의 스레드를 가진다. 따라서 직접적인 관계는 없다. == 프로그래밍 언어 == [[Go(프로그래밍 언어)|Go]]는 언어 차원에서 스레드와 코루틴을 혼합한 '고루틴'이라는 새로운 기능을 제공한다. 여러 스레드에서 코루틴이 한꺼번에 실행된다. 기존의 운영체제가 제공하는 스레드보다 작고 빠른 경량 스레드 개념이며 스레드처럼 동시에 실행할 수 있다. == 코루틴을 지원하는 언어 == * '''[[C++]]''' : C++20에 stackless coroutine이 추가되었다. * '''[[Rust(프로그래밍 언어)|Rust]]''' : 2018 에디션에서 코루틴 관련 문법과 트레이트를 지원한다. 다만, 실행자를 별도로 구현하거나 라이브러리를 사용해야 한다. * '''[[Go(프로그래밍 언어)|Go]]''' * '''[[자바스크립트]]''' : ES6이 제정되기 이전에는 [[AJAX]], 콜백을 사용해 비동기를 구현했다. ES6부터 {{{Promise}}}라는 객체가 등장하였으며, {{{async, await}}} 키워드로 가독성이 더 좋아졌다. * '''[[PHP]]''' : 5.5부터 지원된다. * '''[[C\#]]''' : 2.0부터 지원된다. * '''[[코틀린]]''' : 1.3부터 지원된다. * '''[[파이썬]]''' : 3.5부터 지원된다. * '''[[Lua|루아]]''' : 언어의 여덟가지 기본 type 중 하나로 코루틴이 제공된다.[* type 명칭은 thread인데, 그 내용은 coroutine]