[terminology] 코 루틴이란?

코 루틴이란? 그것들은 동시성과 어떤 관련이 있습니까?



답변

코 루틴과 동시성은 대체로 직교합니다. 코 루틴은 유량 제어가 복귀하지 않고 두 개의 서로 다른 루틴 사이에서 협력 적으로 통과되는 일반적인 제어 구조입니다.

파이썬의 ‘yield’문장이 좋은 예입니다. 코 루틴을 만듭니다. ‘수율’이 발생하면 기능의 현재 상태가 저장되고 제어는 호출 기능으로 돌아갑니다. 그러면 호출 함수는 실행을 양보 함수로 다시 전송할 수 있으며 상태는 ‘수율’이 발생한 지점으로 복원되고 실행이 계속됩니다.


답변

에서 루아에서 프로그래밍 “, Coroutines“절 :

코 루틴은 스레드와 유사합니다 (멀티 스레딩의 의미). 자체 스택, 자체 로컬 변수 및 자체 명령 포인터가있는 실행 라인입니다. 그러나 전역 변수와 대부분 다른 코 루틴과 다른 것을 공유합니다. 스레드와 코 루틴의 주요 차이점은 개념적으로 (또는 문자 그대로 멀티 프로세서 시스템에서) 스레드가있는 프로그램이 여러 스레드를 병렬로 실행한다는 것입니다. 반면에 코 루틴은 협업 적입니다. 언제든지 코 루틴이있는 프로그램은 코 루틴 중 하나만 실행 중이며이 실행중인 코 루틴은 명시 적으로 일시 중지하도록 요청한 경우에만 실행을 일시 중단합니다.

요점은 코 루틴이 “협업”입니다. 다중 코어 시스템에서도 주어진 시간에 하나의 코 루틴 만 실행되지만 다중 스레드는 병렬로 실행될 수 있습니다. 코 루틴 사이에는 선점권이 없으며 실행중인 코 루틴은 실행을 명시 적으로 포기해야합니다.

concurrency“의 경우 Rob Pike의 슬라이드를 참조 할 수 있습니다 .

동시성은 계산을 독립적으로 실행하는 구성입니다.

그래서 코 루틴 A의 실행 중에, 그것은 코 루틴 B로 제어 그리고 잠시 후, 코 루틴 B가 있으므로 코 루틴 A로 제어 다시 통과 통과 의존성 두 코 루틴은 그래서, 코 루틴 사이를, 그리고 그들이 협력하여 실행해야합니다 동시성 없습니다 .


답변

기술적 인 질문이지만 대부분의 답변이 너무 기술적이라고 생각합니다. 나는 코 루틴 과정을 이해하려고 애썼다. 나는 그것을 얻는다. 그러나 나는 동시에 그것을 얻지 못한다.

나는이 답변이 매우 도움이된다는 것을 알았습니다.

https://dev.to/thibmaek/explain-coroutines-like-im-five-2d9

Idan Arye에서 인용하려면 :

당신의 이야기를 바탕으로, 나는 이것을 다음과 같이 넣었습니다.

만화를보기 시작했지만 소개입니다. 인트로를 보지 않고 게임으로 전환하여 온라인 로비에 입장하십시오. 그러나 3 명의 플레이어가 필요합니다. 다른 플레이어가 참여하기를 기다리는 대신 숙제로 전환하고 첫 번째 질문에 대답하십시오. 두 번째 질문에는 시청해야하는 YouTube 동영상에 대한 링크가 있습니다. 열면로드가 시작됩니다. 로드되기를 기다리는 대신 만화로 다시 전환하십시오. 소개가 끝났으므로 볼 수 있습니다. 이제 광고가 있습니다-그러나 다른 플레이어가 합류하여 게임으로 전환하는 등.

아이디어는 한 번에 모든 작업을 수행하는 것처럼 보이도록 작업을 실제로 빠르게 전환하지는 않는다는 것입니다. 당신은 당신의 직접적인 관심이 필요한 다른 일들을하기 위해 당신이 일어나고있는 것을 기다리는 시간을 사용합니다.

링크를 확실히 확인하면 모든 것을 인용 할 수없는 것이 훨씬 많습니다.


답변

코 루틴은 서브 루틴 / 스레드와 유사합니다. 차이점은 호출자가 서브 루틴 / 스레드를 호출하면 호출자 함수로 다시 돌아 가지 않습니다. 그러나 코 루틴은 몇 가지 코드를 실행 한 후 호출자가 자신의 코드 중 일부를 실행하고 실행이 중지 된 코 루틴 지점으로 돌아와서 계속 진행할 수 있도록 호출자에게 다시 돌아올 수 있습니다. 즉. 코 루틴에는 둘 이상의 진입 점과 출구 점이 있습니다


답변

  • 코 루틴은 코 틀린 언어에서 사용할 수있는 훌륭한 기능입니다
  • 코 루틴은 비동기 비 차단 코드를 작성하는 새로운 방법입니다.
  • 코 루틴은 가벼운 실입니다. 가벼운 스레드는 기본 스레드에 매핑되지 않으므로 프로세서의 컨텍스트 전환이 필요하지 않으므로 더 빠릅니다.
  • 네이티브 스레드에 매핑되지 않습니다
  • 코 루틴과 스레드는 모두 멀티 태스킹입니다. 그러나 차이점은 스레드가 OS에 의해 관리되고 사용자가 코 루틴을 관리한다는 것입니다.

기본적으로 두 가지 유형의 코 루틴이 있습니다.

  1. 스택리스
  2. 쌓다

Kotlin은 스택리스 코 루틴을 구현합니다. 즉, 코 루틴에는 자체 스택이 없으므로 기본 스레드에 매핑되지 않습니다.

코 루틴을 시작하는 기능은 다음과 같습니다.

launch{}

async{}

자세한 내용은 여기를 참조하십시오.

https://www.kotlindevelopment.com/deep-dive-coroutines/

https://blog.mindorks.com/what-are-coroutines-in-kotlin-bf4fecd476e9


답변

다른 말로, 파이썬 gevent라이브러리에는 coroutine스레드를 만들고 파괴하는 오버 헤드없이 비동기 네트워크 요청과 같은 스레드와 같은 기능을 제공 하는 기반 네트워킹 라이브러리가 있습니다. 사용 된 coroutine라이브러리는 greenlet입니다.


답변

에서 파이썬 코 루틴 :

파이썬 코 루틴의 실행은 여러 시점에서 일시 중지되고 재개 될 수 있습니다 (코 루틴 참조). 코 루틴 함수 본문 내에서 대기 및 비동기 식별자는 예약 된 키워드가됩니다. await 식, async for 및 async with는 코 루틴 함수 본문에서만 사용할 수 있습니다.

루틴에서 (C ++ 20)

코 루틴은 나중에 다시 시작
하기 위해 실행을 일시 중지 할 수있는 기능입니다 . 코 루틴은 스택이 없으므로 호출자에게 반환하여 실행을 일시 중단합니다. 이를 통해 비동기식으로 실행되는 순차적 코드 (예 : 명시 적 콜백없이 비 차단 I / O 처리)를 수행 할 수 있으며 지연 계산 된 무한 시퀀스 및 기타 용도의 알고리즘도 지원합니다.

다른 사람의 대답과 비교하십시오.

내 의견으로는, 이력서의 뒷부분 은 @Twinkle과 마찬가지로 핵심 차이점입니다.
문서의 많은 필드가 여전히 진행 중이지만이 부분은 @Nan Xiao를 제외하고 대부분의 답변과 비슷합니다.

반면에 코 루틴은 협업 적입니다. 언제든지 코 루틴이있는 프로그램은 코 루틴 중 하나만 실행 중이며이 실행중인 코 루틴은 명시 적으로 일시 중지하도록 요청한 경우에만 실행을 일시 중단합니다.

Lua의 Program에서 인용되었으므로 언어와 관련이 있거나 (현재 Lua에 익숙하지 않음) 모든 문서가 유일한 부분을 언급 한 것은 아닙니다 .

동시과의 관계 :
의에 “실행”부분이 코 루틴 (C ++ 20) .Too 긴 여기에 인용합니다.
세부 사항 외에도 여러 상태가 있습니다.

When a coroutine begins execution
When a coroutine reaches a suspension point
When a coroutine reaches the co_return statement
If the coroutine ends with an uncaught exception
When the coroutine state is destroyed either because it terminated via co_return or uncaught exception, or because it was destroyed via its handle

@ user217714의 답변 아래 @Adam Arold의 의견으로. 동시성입니다.
그러나 멀티 스레딩과는 다릅니다.
std :: thread에서

스레드는 여러 함수가 동시에 실행될 수 있도록합니다. 스레드는 생성자 인수로 제공된 최상위 함수에서 시작하여 관련 스레드 개체가 생성되면 (OS 예약 지연에 따라) 즉시 실행을 시작합니다. 최상위 함수의 반환 값은 무시되며 예외를 throw하여 종료되면 std :: terminate가 호출됩니다. 최상위 함수는 std :: promise를 통해 또는 공유 변수를 수정하여 반환 값 또는 예외를 호출자에게 전달할 수 있습니다 (동기화가 필요할 수 있음 std :: mutex 및 std :: atomic 참조)

동시성이므로 특히 OS 대기 관점에서 대기가 불가피 할 때 멀티 스레딩과 같이 작동하므로 혼란 스럽습니다.