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

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

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

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

같이 보기 편집

각주 편집

  1. The Art of Computer programming, 도널드 커누스 저
  2. 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. 
  3. 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. 
  4. Dahl, O.-J. and Hoare, C.A.R. (ed) (1972). 〈Hierarchical Program Structures〉. 《Structured Programming》. London, UK: Academic Press. 175–220쪽. ISBN 978-0122005503. 
  5. “Coroutine: Type-safe coroutines using lightweight session types”. 
  6. “Co-routines in Haskell”. 
  7. “The Coroutines Module (coroutines.hhf)”. 《HLA Standard Library Manual》. 
  8. “New in JavaScript 1.7”. 2009년 3월 8일에 원본 문서에서 보존된 문서. 2020년 6월 18일에 확인함. 
  9. “Julia Manual - Control Flow - Tasks (aka Coroutines)”. 2020년 6월 13일에 원본 문서에서 보존된 문서. 2020년 6월 18일에 확인함. 
  10. “What's New in Kotlin 1.1”. 
  11. “Lua 5.2 Reference Manual”. 《www.lua.org》. 
  12. “Python async/await Tutorial”. 《Stack Abuse》. 2015년 12월 17일. 
  13. “8. Compound statements — Python 3.8.0 documentation”. 《docs.python.org》. 
  14. “Gather and/or Coroutines”. 2012년 12월 19일. 
  15. McCartney, J. "Rethinking the Computer Music Programming Language: SuperCollider". Computer Music Journal, 26(4):61-68. MIT Press, 2002.