<< Apache event_mpm vs Nginx 성능 비교 | Home | 기계가 세상을 통제한다면.. >>

서브루틴(subroutine) vs 코루틴(co-routine)

서브루틴(subroutine)
폰노이만이 컴퓨터 아키텍처의 발명에 큰 영향을 준 것중에 하나가 서브루틴 개념의 발명이다. 그러다보니 그 지대한 영향력 때문인지 몰라도 사람들의 프로그래밍 스타일까지 파고들어 오늘날에 이르기까지 한다.

서브루틴은 부모와 자식의 주종 관계가 성립하고, 서브루틴의 호출은 부모에 의해서 호출된다. 결국 서브루틴은 처리 후 리턴에 의해 부모로 돌아가는데 그 때 Context정보는 두고 돌아간다.
세상에는 서브루틴처럼 순차적인 문제만 있는 것이 아니다. 문제 자체가 병렬적인게 많다. 대게의 경우 게임이 그러하다. 각각의 플레이어를 계층화할 수 없다는 말이다. 둘 이상이 병렬적으로 Context를 가지고 게임을 하게 된다.
서브루틴은 결과를 리턴할 때마다 Context가 초기화되어 개별 플레이어들의 런타임 Context는 서브루틴 밖으로 리턴시에 가져갈 수 없게 된다.
이런 문제를 해결한 것이 Conway가 생각해 낸 코루틴(co-routine)이다.

코루틴(co-routine)
주종관계가 없는 프로그램 단위가 병렬적으로 진행된다. 자신의 실행을 중단하고 다른 코루틴으로 제어권을 전달할 수도 있다.
서브루틴의 컨텍스트는 종료와 함께 사라지지만, 코루틴의 컨텍스트는 그대로 존재한다. 같은 코루틴에서 멈췄던 곳에서 다시 진행할 수도 있다.



Add a comment Send a TrackBack