2010-08-08 2 views
4

나는 코 루틴 구현에 대해 질문이 있습니다. Lua와 stackless-python에서 처음으로 coroutine을 보았습니다. 나는 그것의 개념과 yield 키워드를 사용하는 방법을 이해할 수 있었지만 어떻게 구현되는지 알 수 없다.코 루틴은 어떻게 구현됩니까?

그들에 대해 설명 할 수 있습니까?

답변

3

coroutining은 대상 주소를 밀어서 시작합니다. 그러면 각 coroutine 스위치는 현재 PC를 스택 상단과 교환합니다. 결국 coroutining을 종료하기 위해 poop을 가져와야합니다.

+1

+1, C 또는 대부분의 스몰 토크 에서처럼 스택에 액세스 할 수있는 경우이 방법을 사용합니다 (또는 구현 한 경우 기본적으로 Stackless Python과 Lua VM이하는 것입니다. –

+0

코 루틴은 협업 멀티 태스킹 운영 체제에서 프로세스 (또는 OS 스레드)와 매우 흡사하다는 점도 흥미 롭습니다. 모든 프로세스는 CPU가 커널을 다시 부팅 할 때까지 계속 실행됩니다.이 시점에서 OS는 PC (및 기타 여러 항목)를 저장하고 다른 프로세스를 선택하여 이전에 해당 프로세스에 대해 저장된 PC로 이동합니다. 각 프로세스는 물론 coroutine과 마찬가지로 스택을 가지고 있습니다. – Feuermurmel

2

참조 : Implementing “Generator” support in a custom language. 발전기는 기본적으로 (세미) 코 루틴의 제한된 형태이며, 그 질문에서 논의되는 대부분이 여기에도 적용됩니다.

또한 How are exceptions implemented under the hood? 예외는 분명히 coroutines와 매우 다르지만 둘 다 공통점이 있습니다. 둘 다 고급 제어 흐름 구조입니다. 사실, 코 루틴을 사용하여 예외 및 예외를 사용하여 코 루틴을 구현할 수 있습니다.