>백엔드 개발 >Golang >Go에서 적절한 고루틴 실행을 위해 `time.Sleep()`이 왜 중요한가요?

Go에서 적절한 고루틴 실행을 위해 `time.Sleep()`이 왜 중요한가요?

Linda Hamilton
Linda Hamilton원래의
2024-12-06 11:58:13367검색

Why is `time.Sleep()` Crucial for Proper Goroutine Execution in Go?

시간의 중요성.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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.