코루틴(coroutine)은 루틴의 일종으로서, 협동 루틴이라 할 수 있다(코루틴의 "Co"는 with 또는 together를 뜻한다). 상호 연계 프로그램을 일컫는다고도 표현가능하다. 루틴과 서브 루틴은 서로 비대칭적인 관계이지만, 코루틴들은 완전히 대칭적인, 즉 서로가 서로를 호출하는 관계이다. 코루틴들에서는 무엇이 무엇의 서브루틴인지를 구분하는 것이 불가능하다. 코루틴 A와 B가 있다고 할 때, A를 프로그래밍 할 때는 B를 A의 서브루틴으로 생각한다. 그러나 B를 프로그래밍할 때는 A가 B의 서브루틴이라고 생각한다. 어떠한 코루틴이 발동될 때마다 해당 코루틴은 이전에 자신의 실행이 마지막으로 중단되었던 지점 다음의 장소에서 실행을 재개한다.[1]
도널드 커누스에 따르면 멜빈 콘웨이는 1958년 코루틴(coroutine)이라는 용어를 만들어냈으며 당시 그는 이를 어셈블리 프로그램에 적용했다.[2] 코루틴에 관해 설명된 최초의 출판물은 1963년에 등장하였다.[3]
코루틴은 어셈블리어 메소드로 기원하였으나 일부 고급 프로그래밍 언어에 지원된다. 초기 예시로는 시뮬라[4], 스몰토크, 모듈라-2가 포함된다. 더 최근의 예로는 루비, 루아, 줄리아, Go가 포함된다.
- ↑ The Art of Computer programming, 도널드 커누스 저
- ↑ Knuth, Donald Ervin (1997). 《Fundamental Algorithms》. The Art of Computer Programming 1 3판. Addison-Wesley. Section 1.4.5: History and Bibliography, pp. 229. ISBN 978-0-201-89683-1.
- ↑ Conway, M. E. (July 1963). “Design of a Separable Transition-Diagram Compiler”. 《Communications of the ACM》 6 (7): 396–408. doi:10.1145/366663.366704.
- ↑ Dahl, O.-J. and Hoare, C.A.R. (ed) (1972). 〈Hierarchical Program Structures〉. 《Structured Programming》. London, UK: Academic Press. 175–220쪽. ISBN 978-0122005503.
- ↑ “Coroutine: Type-safe coroutines using lightweight session types”.
- ↑ “Co-routines in Haskell”.
- ↑ “The Coroutines Module (coroutines.hhf)”. 《HLA Standard Library Manual》.
- ↑ “New in JavaScript 1.7”. 2009년 3월 8일에 원본 문서에서 보존된 문서. 2020년 6월 18일에 확인함.
- ↑ “Julia Manual - Control Flow - Tasks (aka Coroutines)”. 2020년 6월 13일에 원본 문서에서 보존된 문서. 2020년 6월 18일에 확인함.
- ↑ “What's New in Kotlin 1.1”.
- ↑ “Lua 5.2 Reference Manual”. 《www.lua.org》.
- ↑ “Python async/await Tutorial”. 《Stack Abuse》. 2015년 12월 17일.
- ↑ “8. Compound statements — Python 3.8.0 documentation”. 《docs.python.org》.
- ↑ “Gather and/or Coroutines”. 2012년 12월 19일.
- ↑ McCartney, J. "Rethinking the Computer Music Programming Language: SuperCollider". Computer Music Journal, 26(4):61-68. MIT Press, 2002.