java - 协程就是goto吗?
高洛峰
高洛峰 2017-04-17 15:26:00
0
4
1195

协程就是goto吗?两者有何异同?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

모든 응답(4)
PHPzhong

동일한 함수 내에서 goto 점프는 서로 다른 함수 사이를 점프하는 setjumplongjump과 유사해야 합니다.

大家讲道理

이것은 정확하지 않습니다. 의 주요 기능 중 하나는 교차 함수 goto 입니다. 물론 goto는 함수 호출에 더 가깝습니다.

大家讲道理

코루틴은 서브루틴의 개념을 표준화한 컴퓨터 프로그래밍의 구성 요소입니다. 코루틴은 협력적 멀티태스킹, 예외 처리, 이벤트 루프, 반복 장치, 무한 연결 목록 및 파이프 등과 같은 몇 가지 유용한 프로그램 구성 요소를 구현하는 데 매우 적합합니다.

다음은 일반 서브루틴과 코루틴을 비교합니다.

서브루틴의 시작은 유일한 진입점입니다. 종료되면 서브루틴의 실행이 완료됩니다.

서브루틴은 항상 시작 위치(일반적으로 고정 위치)에서 시작됩니다. 병렬 프로그램은 항상 마지막으로 끝난 다음 위치에서 시작됩니다.

코루틴은 Yield를 통해 다른 코루틴을 호출할 수 있습니다. Yield를 통해 실행 권한을 전달하는 코루틴 간의 관계는 호출자와 호출자 간의 관계가 아니라 서로 대칭적이고 동일합니다.

서브루틴은 다른 서브루틴을 하위 서브루틴으로 호출하기 때문에 스택에서 구현하기 쉽습니다. 대신 코루틴은 다른 코루틴을 동일하게 호출하며 제어 흐름을 추적하기 위해 연속(가비지 수집 힙으로 구현)을 사용하여 가장 잘 구현됩니다.

Marlin은 코루틴의 특징을 다음과 같이 설명합니다.

코루틴의 지역 변수는 후속 호출에서 유효한 상태로 유지됩니다.

코루틴은 제어권이 떠날 때 일시 중지되고, 제어권이 반환되면 일시 중지된 곳에서 실행이 계속됩니다.

코루틴 분류

1) 제어 전달 메커니즘에 따른 분류: 대칭 코루틴과 비대칭 코루틴

반대칭 코루틴(semi-symmetric) 또는 반코루틴(semi-coroutines)이라고도 하는 비대칭 코루틴은 호출자의 하위 프로세스로 간주될 수 있습니다. 호출 루틴과 호출 루틴의 관계

대칭 코루틴은 실행 프로세스를 지정된 코루틴에 넘겨주는 제어 전송 메커니즘만 제공합니다. 대칭 코루틴은 실행 프로세스를 서로 전송할 수 있으므로 둘 사이의 관계는 마치 동일한 수준에 있는 것처럼 보입니다.

2) 코루틴은 일급 유형인가요?

3) 완전한 스택이 있나요?

전체 스택이 있는 코루틴을 사용하면 코루틴이 가장 안쪽 함수에서 자체적으로 일시 중지될 수 있습니다. 이 코루틴은 일시 중지된 위치에서 계속 실행됩니다.

Python의 생성기와 같이 완전한 스택이 없는 코루틴은 생성기 본체에서만 정지될 수 있습니다.

완전한 스택이 있는 코루틴은 사용자 수준 멀티태스킹을 구현하는 데 사용할 수 있지만, 완전한 스택이 없는 코루틴은 사용할 수 없습니다.

大家讲道理

코루틴의 키워드는 Yield 입니다. 개인적으로 의미는 다음과 같아야 합니다.
실행을 중단하고 데이터를 반환합니다. 중단점으로 돌아가 실행을 다시 시작하려면 다시 호출하세요.
Yield는 return 및 중단점 이동과 동일합니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿