> 백엔드 개발 > Golang > 왜 `time.Sleep`이 Go에서 동시 고루틴 실행을 활성화합니까?

왜 `time.Sleep`이 Go에서 동시 고루틴 실행을 활성화합니까?

Susan Sarandon
풀어 주다: 2024-12-05 15:40:10
원래의
553명이 탐색했습니다.

Why Does `time.Sleep` Enable Concurrent Goroutine Execution in Go?

시간. Sleep 및 고루틴 실행

제공된 코드에서 time.Sleep 함수는 동시 고루틴 실행을 활성화하는 데 중요한 역할을 합니다. time.Sleep이 주석 처리되면 "world" 고루틴은 결코 실행될 기회를 얻지 못합니다.

이 동작의 이유는 Go 고루틴 스케줄러의 비선점적 특성에 있습니다. 선점형 스케줄러와 달리 Go 스케줄러는 자발적으로 포기하지 않는 한 현재 실행 중인 고루틴이 제어권을 양보하도록 강제하지 않습니다. time.Sleep이 없으면 기본 고루틴은 제어를 독점하여 반환하기 전에 say("hello") 루프를 5번 완료합니다. 메인 고루틴이 프로그램 실행을 담당하기 때문에 프로그램은 "world" 고루틴이 실행될 시간을 남기지 않고 즉시 종료됩니다.

시간이 지나면 "world" 고루틴은 제자리에 있는 동안 실행될 수 있습니다. 메인 고루틴이 기다리고 있습니다. 메인 고루틴이 시간 실행 제어권을 양보하면 스케줄러는 "월드" 고루틴으로 전환하여 메인 고루틴이 재개되기 전에 첫 번째 반복을 실행할 수 있습니다. 이러한 고루틴 간의 제어 교대를 통해 두 작업이 모두 완료될 수 있으며 결과적으로 "world"와 "hello"가 화면에 교대로 인쇄되는 예상 출력이 생성됩니다.

위 내용은 왜 `time.Sleep`이 Go에서 동시 고루틴 실행을 활성화합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿