코루틴

코루틴(coroutine)은 루틴의 일종으로서, 협동 루틴이라 할 수 있다(코루틴의 "Co"는 with 또는 together를 뜻한다). 상호 연계 프로그램을 일컫는다고도 표현가능하다. 루틴과 서브 루틴은 서로 비대칭적인 관계이지만, 코루틴들은 완전히 대칭적인, 즉 서로가 서로를 호출하는 관계이다. 코루틴들에서는 무엇이 무엇의 서브루틴인지를 구분하는 것이 불가능하다. 코루틴 A와 B가 있다고 할 때, A를 프로그래밍 할 때는 B를 A의 서브루틴으로 생각한다. 그러나 B를 프로그래밍할 때는 A가 B의 서브루틴이라고 생각한다. 어떠한 코루틴이 발동될 때마다 해당 코루틴은 이전에 자신의 실행이 마지막으로 중단되었던 지점 다음의 장소에서 실행을 재개한다.

도널드 커누스에 따르면 멜빈 콘웨이는 1958년 코루틴(coroutine)이라는 용어를 만들어냈으며 당시 그는 이를 어셈블리 프로그램에 적용했다. 코루틴에 관해 설명된 최초의 출판물은 1963년에 등장하였다.

네이티브 지원 프로그래밍 언어 

코루틴은 어셈블리어 메소드로 기원하였으나 일부 고급 프로그래밍 언어에 지원된다. 초기 예시로는 시뮬라, 스몰토크, 모듈라-2가 포함된다. 더 최근의 예로는 루비, 루아,  줄리아, Go가 포함된다.

 Aikido
 AngelScript
 Ballerina
 BCPL
 파스칼 (uThreads 모듈이 포함된 볼랜드 터보 파스칼 7.0)
 BETA
 BLISS
 C++ (C++20 이후)
 C# (2.0 이후)
 ChucK
 CLU
 D
 다이내믹 C
 얼랭
 F#
 팩터
 게임몽키 스크립트
 GDScript (Godot의 스크립트 언어)
 Go
 하스켈
 High Level Assembly
 아이콘
 아이오
 자바스크립트 (ECMAScript 6에서 표준화된 1.7 이후) ECMAScript 2017 또한 await 지원을 포함한다.
 줄리아
 코틀린 (1.1 이후)
 림보
 루아
 루시드
 µC++
 MiniD
 Modula-2
 Nemerle
 펄 (Coro 모듈 사용 시)
 PHP (HipHop 사용 시. 네이티브 지원은 PHP 5.5 이후.)
 Picolisp
 프롤로그
 파이썬 (2.5 이후, 3.3 이후부터 개선 지원됨, 3.5 이후부터 명시적 문법 지원)
 Raku
 루비
 Sather
 스킴
 셀프
 시뮬라 67
 스몰토크
 스퀴럴
 스택리스 파이썬
 Supercollider
 Tcl (8.6 이후)
 urbiscript

같이 보기 
 파이프 (유닉스): 코루틴의 일종

각주 

병행 컴퓨팅
함수 (프로그래밍)