1. 코 루틴 개념 :
루틴이나 서브 루틴, 이러한 모든 언어로 모든 통화 계층 구조, 실행 B, A 마침내 완성 수익을 반환, B, B 다음 프로세스 실행 호출하고 C, C 완성 된 수익을 호출 할 수 있습니다. 스택을 통해 달성되어, 스레드가 수행하는 자칭 항목, 호출이 분명하다 주문에 따라 수익을 호출하는 주장.
코드 :
데프 C () : 인쇄 ( " C - 시작 " ) 인쇄 ( " C - 끝 " ) 데프 B () : 인쇄 ( " B - 시작 " ) C () 인쇄 ( " B - 끝 " ) 데프 A () : 인쇄 ( " A - 시작 " ) B () 인쇄 ( " A - 끝 " ) A () # A를 - 시작 #의 B를 - 시작 #의 C를 - 시작 #의 C를 - 끝 #의 B를- 끝 # A를 --end
코 루틴 : 그것은 일상적인,하지만 구현 과정에서 서브 루틴 내에서 중단 될 수있는 것 같습니다. 그런 다음 함수 호출없이 다른 인터럽트 서브 루틴의 구현을 켭니다.
코 루틴 스레드에 비해 코 루틴 실행 효율은 하나 개의 스레드 만 있기 때문에, 단지 그것의 상태를 결정해야 잠금 해제에 조정 과정을 자원하는 주요 변수의 더 쓰기 충돌이없는 매우 높다. 예를 들어, 방법으로 다음 코드를 다루는?
DEF A () 인쇄 ( 1. ) 인쇄 ( 2 ) 인쇄 ( 3. ) DEF의 B () : 인쇄 ( " X " ) 인쇄 ( " Y " ) 인쇄 ( " Z " ) 없이 # 실행 결과 B 통화 중 # . (1) (2) XYZ . 3 # 1 그런데 특성 코 루틴 실행 스레드, 스레드 같은 비트의 실행 중에, B 보일
2. 간단한 코 루틴을 설정합니다 :
코 루틴은 발전기에 의해 달성된다.
코드 첫 :
RUN DEF () (인쇄 . 1 ) , 수율 10 인쇄 ( 2 ) 수율 (20)는 (인쇄 . 3 ) , 수율 30 #은 심플 코 루틴, 구현 단계의 제어 기능, 저장 스레드 또는 프로세스 전환. # 반환 값은 발전기입니다. m = RUN () 전단 (NEXT (m))
설명 : 사실, 우리가 여기 발전기의 개념을 사용합니다. 발전기를 실행하는 것을 계속하도록 트리거 발생기.
설명 : 수율 = 복귀 모두 그대로 동일한 의미하지만, 수율이 직접 반환하지만, 사용자 조작을 기다리는 되돌아가 결합 위치로 복귀시키지된다.
3. 데이터 전송 :
코드 :
DEF RUN () : # 널 변수 저장 역할 데이터 보유하지 빈 데이터 = "" R & LT = 수율 데이터 #의 R & LT = 인쇄 ( . 1 , R & LT, 데이터)를 R & LT = 항복 데이터 #의 R & LT = B의 인쇄 ( 2 , R & LT, 데이터) R & LT = 항복 데이터 #의 R & LT = C의 전단 ( . 3 , R & LT, 데이터) R & LT = 항복 데이터 m = RUN ()가 발전기 제조 # 같다 # 개시 m의 인쇄 (m.send (없음)) 인쇄 (m.send ( " " )) 프린트 (m.send ( " B " )) 프린트 (m.send ( " C " )) 이 널 값으로 인쇄 된 것을 # 주 # . 1 #의 # 2 B의 #의 # 3 C
설명 1 : .send () 메시지 발생기로 보내진다.
주 2 : 실행 :( 우리가 반환 이해하고 원하는대로 볼 산출한다주의 다음과 같이)
단계 : 없음받은 후, 함수는 null 값을 보내는 null 값을주지, 수율이 R, 빈 인쇄에 NULL 데이터를 반환합니다.
파트 II : 우리는 전송 데이터의 ""를 제공하고 "는"R의 값, 인쇄 1, "A"로 산출하기 위해 데이터를 반환
뒤에 유사.
예를 들어 우리는 발전기에 전달 된 매개 변수의 함수의 형태를 사용합니다.
제조자 DEF (C) c.send (없음) 을위한 I 의 범위 ( 5. ) 인쇄 ( " 제조자 데이터 D %의 생성 " %의 I) R & LT = c.send (STR (I)) 인쇄 ( " 소비를 데이터 S % " %의 R & LT) c.close () DEF 고객 () : 데이터 = " " 그동안 참 : N- = 항복 데이터 IF 하지 N- : 리턴 인쇄 ( " S의 %의 소비 지출 " %의 N-) 데이터 = " 200 " C = 고객 () 프로듀서 (C)는 0 # 제조자 데이터 생성 # 0 소비자 지출 #의 소비 데이터 (200) # 1 데이터 제조자 생성 #에서 소비 한 소비 미국인에게 데이터 (200) (2 #)의 생산 데이터를 생성 # 2 소비자 지출 # 200 소비자 지출 데이터 3 제조자 데이터 생성 # # 3 소비자 지출 # 200 소비 데이터 # 4의 생산 데이터를 생성 # 소비자 지출 4 # (200) 소비자 지출 데이터