문제

a의 개념 코 루틴 매우 흥미롭지 만 실제 생산 환경에서 의미가 있다면 모르겠습니까? 다른 방법과 마찬가지로 더 우아하고 단순하거나 효율적으로 해결할 수있는 코 루틴의 사용 사례는 무엇입니까?

도움이 되었습니까?

해결책

True Corootines는 툴링의 지원이 필요합니다. 컴파일러가 구현하고 기본 프레임 워크에서 지원해야합니다.

C# 2.0에 제공된 "수율 반환"키워드와 함께 코 루틴의 실제 예제 예 중 하나가 발견되며,이를 통해 루핑을 위해 여러 값을 반환하는 메소드를 작성할 수 있습니다.

그러나 "수익 수익률"에는 제한 사항이 있습니다. 구현은 헬퍼 클래스를 사용하여 상태를 캡처하며 발전기 (ITERATOR)의 특정 사례 만 지원합니다.

보다 일반적인 경우, 코 루틴의 장점은 특정 상태 기반 계산을 훨씬 쉽게 표현하고 이해하기 쉽게 만든다는 것입니다. 코 루틴 세트로 상태 머신을 구현하는 것은 더 일반적인 접근 방식보다 더 우아 할 수 있습니다.. 그러나이를 수행하려면 C# 또는 Java에는 아직 존재하지 않는 지원 및 툴링이 필요합니다.

다른 팁

코 루틴이 무엇인지 설명하는 좋은 답변.

그러나 실제 사용 사례의 경우. 웹 서버를 사용하십시오. 그것은 여러 개의 동시 연결을 가지고 있으며, 모두 읽기와 쓰기를 예약하고자합니다.

이것은 코 루틴을 사용하여 구현할 수 있습니다. 각 연결은 소량의 데이터를 읽거나 쓸 수있는 코 루틴으로, 스케줄러에 "컨트롤을 생성"하며, 이는 모든 연결을 통해 순환 할 때 다음 코 루틴으로 전달됩니다.

예를 들어 많은 것들이 다음과 같습니다.

grep TODO *.c *.h | wc -l

위의 파이프 라인은 정확히 코 루틴입니다 grep 명령은 버퍼로 이동하는 일련의 라인을 생성합니다. wc 명령 "먹는다"; 버퍼가 채워지면 grep 버퍼가 비워 질 때까지 "블록"하고 버퍼가 비어 있으면 wc 명령은 새 입력을 기다립니다.

코 루틴에 대한 것은 현재 가장 자주 언급 된 파이썬 발전기와 같이 더 제한된 패턴 또는 파이프 라인으로 사용된다는 것입니다.

더보고 싶다면 Wikipedia 기사를 참조하십시오. 코 루틴 그리고 반복자.

나는 이것이 질문이 제기 된 지 거의 5 년이 지난 것을 알고 있지만, 코 루틴이 본질적으로 시간을 계산하기 위해 많은 사용을 사용하는 게임의 사용 사례에 대해 아무도 언급하지 않았다는 것에 놀랐습니다.

게임에서 일관된 프레임 속도를 유지하려면 60fps가 각 프레임에서 코드를 실행할 수있는 약 16.6ms가 있습니다. 여기에는 물리 시뮬레이션, 입력 처리, 드로잉/페인팅이 포함됩니다.

방법이 모든 프레임에서 실행되었다고 가정 해 봅시다. 메소드가 오랜 시간이 걸리고 여러 프레임에 걸쳐있는 경우 게임 루프에서 나머지 계산을 비틀 거리며 사용자가 "jank"(갑자기 프레임 속도가 떨어지는)를 나타냅니다.

코 루틴이 할 수있는 일은 어떻게 든이 계산이 각 프레임에서 약간 실행되도록 시간을 슬라이스하는 것입니다.

이를 위해 Corootines는 본질적으로 방법이 "발신자"(이 경우 게임 루프)로 계산을 "수율"하여 다음에 메소드가 호출되면 중단 된 위치에서 재개되도록합니다.

코 루틴은 생산자/소비자 패턴을 구현하는 데 유용합니다.

예를 들어, Python은 다음과 같은 언어 기능으로 코 루틴을 도입했습니다. 발전기, 반복자의 구현을 단순화하기위한 것입니다.

또한 협력 멀티 태스킹을 구현하는 데 유용 할 수 있습니다. 여기서 각 작업은 스케줄러/원자로에 생성되는 코 루틴입니다.

코 루틴은 시스템에 두 개 이상의 코드가있을 때마다 유용 할 수 있습니다.

예를 들어, LCD-and-KEYPAD 사용자 인터페이스와 모뎀이있는 장치를 고려하고 모뎀을 사용하여 주기적으로 KeyPad의 사용자가 수행하는 상태와 독립적으로 상태를 호출하고보고해야합니다. 사용자 인터페이스를 작성하는 가장 좋은 방법은 "input_numeric_value (& conv_speed_format, & conveyor_speed)와 같은 함수를 사용하는 것입니다. 사용자가 값을 입력했을 때 반환되고 통신을 처리하는 가장 좋은 방법은 "Wait_for_Carrier ();"와 같은 기능을 사용 할 수 있습니다. 장치가 연결되거나 결정되지 않았을 때 반환됩니다.

코 루틴이 없으면 UI 서브 시스템 또는 모뎀 서브 시스템은 상태 머신을 사용하여 구현해야합니다. 코 루틴을 사용하면 두 하위 시스템이 가장 자연스러운 스타일로 작성 될 수 있습니다. 서브 시스템이 사물을 "일관된"상태 및 호출 수율 ()에 넣지 않고 오랫동안 오랫동안 진행되지 않거나, "일관된"상태에 물건을 넣지 않고 수율 ()을 호출하는 것이 중요하지만 일반적으로 이들을 충족하기는 어렵지 않습니다. 제약.

본격적인 멀티 태스킹을 사용할 수 있지만 공유 상태가 변경되는 시간마다 모든 곳에서 자물쇠를 사용해야합니다. 코 루틴 스위처는 수율 () 호출을 제외하고는 사물을 전환하지 않기 때문에, 두 가지 일 루틴은 다음 수익률 이전에 모든 것이 순서대로 보장되도록 공유 상태를 자유롭게 변경할 수 있고, 다른 루틴이 상태를 변경하기 위해 준비됩니다. " "수율 ().

생산자/소비자 라인에서보다 특정한 예로 겸손한 배치보고 프로그램이 실제로 공동 경로를 사용할 수있는 것만 큼 간단합니다.

이 예제의 핵심 힌트는 입력 데이터 (예 : 데이터 파싱 또는 계정에 대한 충전 및 지불금을 축적) 및 사소한 작업을 수행하는 사소한 작업을 수행하는 것입니다. 이러한 특성이있는 경우 :

  • 다양한 장소에서 작업 단위를 "방출"할 수있는 경우 입력 측 코드를 구성/이해하기 쉽습니다.
  • 마찬가지로 중첩 된 제어 구조에서 다음 작업 단위를 "잡을 수 있다면 출력 측 코드를 구성/이해하기 쉽습니다.

그런 다음 코 루틴과 대기열은 둘 다 처분 할 수있는 좋은 기술입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top