>백엔드 개발 >Golang >Go에서 메인 고루틴을 무한정 실행하려면 어떻게 해야 합니까?

Go에서 메인 고루틴을 무한정 실행하려면 어떻게 해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-17 21:25:10187검색

How Can I Keep the Main Goroutine Running Indefinitely in Go?

Go에서 기본 고루틴의 존재 연장

영원한 잠

Go는 처리 능력을 소비하지 않고 기본 고루틴을 무기한 실행하도록 하는 다양한 메커니즘을 제공합니다. . 다음 전략을 고려하십시오.

  • 대소문자 없는 선택: CPU 소비 없이 영원히 차단하는 것은 사례나 기본 절이 없는 select 문을 통해 달성할 수 있습니다.

    select {}
  • 빈 채널에서 수신: 메인 고루틴은 빈 채널에서 지속적으로 수신함으로써 무기한 정지될 수 있습니다:

    <-make(chan int)
  • Nil 채널에서 수신: 마찬가지로, nil 채널에서 수신하면 같은 효과:

    <-chan int(nil)
  • Nil 채널로 전송: nil 채널로 전송하면 기본 goroutine도 영구적으로 일시 중지됩니다.

    (chan int)(nil) <- 0
  • 사전잠금 잠금 뮤텍스: 이미 잠긴 뮤텍스를 잠그면 기본 고루틴이 효과적으로 지연됩니다.

    mu := sync.Mutex{}
    mu.Lock()
    mu.Lock()

제어된 종료

우아한 종료를 용이하게 하기 위해 전용 종료 채널을 사용할 수 있습니다. 활용됩니다. 프로그램을 종료해야 하는 경우 이 채널이 닫힙니다.

var quit = make(chan struct{})

func main() {
    defer close(quit)
    // Application code...
    <-quit
}

별도의 고루틴에서 종료 채널을 닫으면 기본 고루틴이 종료됩니다.

close(quit)

Sleep Without Blocking

메인 고루틴이 차단되지 않고 종료되는 것을 방지하는 것이 목표라면, time.Sleep() 함수는 약 292년으로 제한되는 충분히 긴 기간으로 사용할 수 있습니다.

time.Sleep(time.Duration(1<<63 - 1))

장기간 동안 위의 시간을 통합하는 무한 루프를 고려하세요.Sleep():

for {
    time.Sleep(time.Duration(1<<63 - 1))
}

위 내용은 Go에서 메인 고루틴을 무한정 실행하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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