문제
a의 개념 코 루틴 매우 흥미롭지 만 실제 생산 환경에서 의미가 있다면 모르겠습니까? 다른 방법과 마찬가지로 더 우아하고 단순하거나 효율적으로 해결할 수있는 코 루틴의 사용 사례는 무엇입니까?
해결책
True Corootines는 툴링의 지원이 필요합니다. 컴파일러가 구현하고 기본 프레임 워크에서 지원해야합니다.
C# 2.0에 제공된 "수율 반환"키워드와 함께 코 루틴의 실제 예제 예 중 하나가 발견되며,이를 통해 루핑을 위해 여러 값을 반환하는 메소드를 작성할 수 있습니다.
그러나 "수익 수익률"에는 제한 사항이 있습니다. 구현은 헬퍼 클래스를 사용하여 상태를 캡처하며 발전기 (ITERATOR)의 특정 사례 만 지원합니다.
보다 일반적인 경우, 코 루틴의 장점은 특정 상태 기반 계산을 훨씬 쉽게 표현하고 이해하기 쉽게 만든다는 것입니다. 코 루틴 세트로 상태 머신을 구현하는 것은 더 일반적인 접근 방식보다 더 우아 할 수 있습니다.. 그러나이를 수행하려면 C# 또는 Java에는 아직 존재하지 않는 지원 및 툴링이 필요합니다.
다른 팁
코 루틴이 무엇인지 설명하는 좋은 답변.
그러나 실제 사용 사례의 경우. 웹 서버를 사용하십시오. 그것은 여러 개의 동시 연결을 가지고 있으며, 모두 읽기와 쓰기를 예약하고자합니다.
이것은 코 루틴을 사용하여 구현할 수 있습니다. 각 연결은 소량의 데이터를 읽거나 쓸 수있는 코 루틴으로, 스케줄러에 "컨트롤을 생성"하며, 이는 모든 연결을 통해 순환 할 때 다음 코 루틴으로 전달됩니다.
나는 이것이 질문이 제기 된 지 거의 5 년이 지난 것을 알고 있지만, 코 루틴이 본질적으로 시간을 계산하기 위해 많은 사용을 사용하는 게임의 사용 사례에 대해 아무도 언급하지 않았다는 것에 놀랐습니다.
게임에서 일관된 프레임 속도를 유지하려면 60fps가 각 프레임에서 코드를 실행할 수있는 약 16.6ms가 있습니다. 여기에는 물리 시뮬레이션, 입력 처리, 드로잉/페인팅이 포함됩니다.
방법이 모든 프레임에서 실행되었다고 가정 해 봅시다. 메소드가 오랜 시간이 걸리고 여러 프레임에 걸쳐있는 경우 게임 루프에서 나머지 계산을 비틀 거리며 사용자가 "jank"(갑자기 프레임 속도가 떨어지는)를 나타냅니다.
코 루틴이 할 수있는 일은 어떻게 든이 계산이 각 프레임에서 약간 실행되도록 시간을 슬라이스하는 것입니다.
이를 위해 Corootines는 본질적으로 방법이 "발신자"(이 경우 게임 루프)로 계산을 "수율"하여 다음에 메소드가 호출되면 중단 된 위치에서 재개되도록합니다.
코 루틴은 생산자/소비자 패턴을 구현하는 데 유용합니다.
예를 들어, Python은 다음과 같은 언어 기능으로 코 루틴을 도입했습니다. 발전기, 반복자의 구현을 단순화하기위한 것입니다.
또한 협력 멀티 태스킹을 구현하는 데 유용 할 수 있습니다. 여기서 각 작업은 스케줄러/원자로에 생성되는 코 루틴입니다.
코 루틴은 시스템에 두 개 이상의 코드가있을 때마다 유용 할 수 있습니다.
예를 들어, LCD-and-KEYPAD 사용자 인터페이스와 모뎀이있는 장치를 고려하고 모뎀을 사용하여 주기적으로 KeyPad의 사용자가 수행하는 상태와 독립적으로 상태를 호출하고보고해야합니다. 사용자 인터페이스를 작성하는 가장 좋은 방법은 "input_numeric_value (& conv_speed_format, & conveyor_speed)와 같은 함수를 사용하는 것입니다. 사용자가 값을 입력했을 때 반환되고 통신을 처리하는 가장 좋은 방법은 "Wait_for_Carrier ();"와 같은 기능을 사용 할 수 있습니다. 장치가 연결되거나 결정되지 않았을 때 반환됩니다.
코 루틴이 없으면 UI 서브 시스템 또는 모뎀 서브 시스템은 상태 머신을 사용하여 구현해야합니다. 코 루틴을 사용하면 두 하위 시스템이 가장 자연스러운 스타일로 작성 될 수 있습니다. 서브 시스템이 사물을 "일관된"상태 및 호출 수율 ()에 넣지 않고 오랫동안 오랫동안 진행되지 않거나, "일관된"상태에 물건을 넣지 않고 수율 ()을 호출하는 것이 중요하지만 일반적으로 이들을 충족하기는 어렵지 않습니다. 제약.
본격적인 멀티 태스킹을 사용할 수 있지만 공유 상태가 변경되는 시간마다 모든 곳에서 자물쇠를 사용해야합니다. 코 루틴 스위처는 수율 () 호출을 제외하고는 사물을 전환하지 않기 때문에, 두 가지 일 루틴은 다음 수익률 이전에 모든 것이 순서대로 보장되도록 공유 상태를 자유롭게 변경할 수 있고, 다른 루틴이 상태를 변경하기 위해 준비됩니다. " "수율 ().
생산자/소비자 라인에서보다 특정한 예로 겸손한 배치보고 프로그램이 실제로 공동 경로를 사용할 수있는 것만 큼 간단합니다.
이 예제의 핵심 힌트는 입력 데이터 (예 : 데이터 파싱 또는 계정에 대한 충전 및 지불금을 축적) 및 사소한 작업을 수행하는 사소한 작업을 수행하는 것입니다. 이러한 특성이있는 경우 :
- 다양한 장소에서 작업 단위를 "방출"할 수있는 경우 입력 측 코드를 구성/이해하기 쉽습니다.
- 마찬가지로 중첩 된 제어 구조에서 다음 작업 단위를 "잡을 수 있다면 출력 측 코드를 구성/이해하기 쉽습니다.
그런 다음 코 루틴과 대기열은 둘 다 처분 할 수있는 좋은 기술입니다.