시간의 중요성.Sleep in Goroutines: 실행 보장
Go에서 goroutine은 동시 프로그래밍을 지원하여 여러 작업을 동시에 실행할 수 있습니다. 그러나 특정 시나리오에서는 적절한 실행을 촉진하기 위해 time.Sleep을 사용해야 할 수도 있습니다.
Go 튜토리얼에서 다음 코드 조각을 고려하세요.
package main import ( "fmt" "time" ) func say(s string) { for i := 0; i < 5; i++ { time.Sleep(100 * time.Millisecond) fmt.Println(s) } } func main() { go say("world") say("hello") }
이 코드가 실행되면 "hello "와 "world"가 화면에 5번 번갈아 인쇄됩니다. 하지만 time.Sleep이 제거되면 "hello"만 5번 인쇄됩니다.
고루틴 실행에 time.Sleep이 왜 중요한가요? 그 대답은 Go 스케줄러의 비선점적 특성에 있습니다. 고루틴은 서로를 선점하지 않습니다. 즉, 다른 고루틴이 실행될 수 있도록 명시적으로 제어권을 양보해야 합니다.
시간이 없으면 잠자기, 기본 고루틴(say("hello"))은 제어권을 포기하지 않습니다. , say("world") 고루틴이 실행되는 것을 방지합니다. 결과적으로 메인 고루틴의 출력만 인쇄되고, 두 번째 고루틴은 main() 함수가 반환될 때 효과적으로 종료됩니다.
따라서 time.Sleep은 양보점 역할을 하여 say("world를 허용합니다. ") 고루틴을 사용하여 CPU 시간을 획득하고 해당 코드를 실행합니다. time.Sleep은 기본 고루틴에 지연을 도입함으로써 보조 고루틴이 작업을 인터리브할 수 있는 기회를 만듭니다.
결론적으로 time.Sleep은 특정 고루틴 시나리오에서 모든 고루틴에 다음이 제공되도록 하는 데 필수적입니다. 실행할 기회. 항복점으로 사용하면 선점 문제를 방지하고 동시 프로그래밍이 의도한 대로 작동할 수 있습니다.
위 내용은 Go에서 적절한 고루틴 실행을 위해 `time.Sleep()`이 왜 중요한가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!