"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 모든 고루틴이 완료된 후 Go 프로그램을 정상적으로 종료하려면 어떻게 해야 합니까?

모든 고루틴이 완료된 후 Go 프로그램을 정상적으로 종료하려면 어떻게 해야 합니까?

2025년 1월 23일에 게시됨
검색:293

How Can I Gracefully Exit a Go Program After All Goroutines Have Finished?

Go 루틴을 적절하게 기다려서 정상적인 프로그램 종료 보장

Go 루틴을 사용할 때는 프로그램을 종료하기 전에 완료되었는지 확인하는 것이 중요합니다. . 루틴이 끝날 때까지 기다리는 메커니즘을 이해하면 이를 효과적으로 구현할 수 있습니다.

"

루틴을 기다리는 열쇠 Go 루틴은 차단 작업인 "

적절한 동기화를 통해 교착 상태 방지

마지막 줄의 주석 처리를 제거하면 "done" 채널을 이미 한 번 읽었기 때문에 교착 상태가 발생합니다. 교착 상태는 둘 이상의 루틴이 서로 보유하는 리소스를 획득하려고 시도하여 진행을 방해하는 종속성을 생성할 때 발생합니다. 이를 방지하려면 루틴과 채널 간의 적절한 동기화를 확인하세요.

장기 실행 기능을 병렬화하려는 시나리오에서는 "동기화" 패키지가 보다 강력한 솔루션을 제공합니다. "sync.WaitGroup" 유형을 사용하면 활성 루틴 수를 추적하고 진행하기 전에 완료될 때까지 기다릴 수 있습니다. 아래 예에서는 이 접근 방식을 보여줍니다.

package main

import (
    "fmt"
    "sync"
    "time"
)

func main() {
    var wg sync.WaitGroup
    for i := 0; i 

"sync.WaitGroup"을 사용하면 프로그램이 계속 진행하기 전에 모든 장기 실행 기능이 완료될 때까지 기다리도록 하여 잠재적인 교착 상태를 방지할 수 있습니다. 이는 Go 루틴을 조정하는 데 있어 보다 통제된 접근 방식을 제공합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3