고루틴 협력 스케줄링 및 잠재적 실행 기아
고루틴은 협력적으로 예약됩니다. 즉, 자발적으로 다른 고루틴에 실행을 양보합니다. 이 접근 방식은 일반적으로 공정성을 보장하지만, 양보를 자제하는 고루틴이 잠재적으로 다른 고루틴을 고갈시킬 수 있는지에 대한 의문을 제기합니다.
참조된 블로그 게시물에 따르면(http://blog.nindalf.com/how-goroutines) -work/), 양보하지 않고 계속해서 반복되는 고루틴은 실제로 동일한 스레드의 다른 고루틴을 고갈시킬 수 있습니다. 특정 스레드의 고루틴은 다중화됩니다. 즉, 네트워크 입력, 휴면 또는 채널 작업과 같은 차단 작업이 발생하더라도 스레드를 차단하지 않습니다.
예를 들어, 주어진 코드에서 "sum" 함수가 반복적으로 임의의 횟수만큼 반복하여 합계에 숫자를 추가하고 최종 결과를 인쇄합니다. 예에 표시된 대로 "go" 키워드를 사용하여 이러한 고루틴이 여러 개 생성된 경우 하나씩 실행되는지 여부는 다음 요소에 따라 달라집니다.
따라서 명시적인 항복이나 스케줄링을 트리거하는 함수 호출이 없는 경우 무한 루프를 실행하는 고루틴은 잠재적으로 동일한 스레드의 다른 고루틴을 고갈시킬 수 있습니다. 그러나 Go 런타임은 고루틴 실행의 균형을 맞추고 기아 상태를 방지하기 위해 적극적으로 시도한다는 점에 유의하는 것이 중요합니다.
위 내용은 지속적으로 실행되는 고루틴이 Go에서 다른 고루틴을 고갈시킬 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!