WaitGroup은 Go루틴 실행을 조정하기 위한 Go의 동기화 메커니즘입니다. 이를 사용하여 실행을 계속하기 전에 기본 고루틴이 고루틴 그룹이 완료될 때까지 기다리도록 합니다. 구체적인 사용법: WaitGroup 인스턴스를 생성하고 대기할 고루틴 수를 나타내는 초기 카운터를 설정합니다. 기다릴 각 고루틴에 대해 wg.Add(1)을 호출하여 카운터를 증가시킵니다. 고루틴이 완료된 후 wg.Done()을 호출하여 카운터를 감소시킵니다. 마지막으로 기본 고루틴은 wg.Wait()를 호출하여 모든 고루틴이 완료될 때까지 자체를 차단합니다.
WaitGroup을 사용하여 Go에서 고루틴이 완료될 때까지 기다리는 방법
Go에서 WaitGroup
은 여러 고루틴의 실행을 조정하는 데 사용되는 동기화 메커니즘입니다. 이를 통해 기본 고루틴은 고루틴 그룹이 완료될 때까지 기다릴 수 있으므로 실행을 계속하기 전에 모든 관련 작업이 완료되었는지 확인할 수 있습니다. WaitGroup
是一种同步机制,用于协调多个 goroutine 的执行。它允许主 goroutine 等待一组 goroutine 完成,从而确保在继续执行之前所有相关任务都已完成。
用法:
创建一个 WaitGroup
实例,并为其设置一个初始计数器,表示要等待的 goroutine 数。对于每个要等待的 goroutine,调用 wg.Add(1)
来增加计数器,并在 goroutine 完成后调用 wg.Done()
来减少计数器。最后,主 goroutine 调用 wg.Wait()
来阻塞自身,直到所有 goroutine 都已完成。
代码示例:
package main import ( "fmt" "sync" ) var wg sync.WaitGroup func main() { // 创建一个需要等待 3 个 goroutine 完成的 WaitGroup wg.Add(3) // 创建 3 个 goroutine for i := 0; i < 3; i++ { go func(i int) { fmt.Printf("Goroutine %d started\n", i) // 模拟一些需要时间的工作 for j := 0; j < 10000; j++ {} fmt.Printf("Goroutine %d finished\n", i) // 通知 WaitGroup 该 goroutine 已完成 wg.Done() }(i) } // 等待所有 goroutine 完成 wg.Wait() fmt.Println("All goroutines have finished") }
实战案例:
此代码示例模拟了一个简单的 Web 服务器,该服务器会启动多个 goroutine 来处理请求。为了确保在关闭服务器之前 goroutine 已完成,我们使用 WaitGroup
WaitGroup
인스턴스를 생성하고 대기할 고루틴 수를 나타내는 초기 카운터를 설정합니다. 대기할 각 고루틴에 대해 wg.Add(1)
를 호출하여 카운터를 증가시키고, 고루틴이 완료되면 wg.Done()
을 호출하여 카운터를 감소시킵니다. 마지막으로 기본 고루틴은 wg.Wait()
를 호출하여 모든 고루틴이 완료될 때까지 자신을 차단합니다. 🎜🎜🎜코드 샘플: 🎜🎜package main import ( "fmt" "net/http" "sync" ) var wg sync.WaitGroup func main() { // 创建一个需要等待所有 HTTP 请求完成的 WaitGroup wg.Add(10) // 监听端口 8080 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, World!") // 请求处理完毕后,通知 WaitGroup wg.Done() }) http.ListenAndServe(":8080", nil) // 等待所有 HTTP 请求完成 wg.Wait() fmt.Println("All HTTP requests have been processed") }
WaitGroup
을 사용하여 모든 고루틴이 완료될 때까지 기다립니다. 🎜아아아아위 내용은 Golang 함수는 WaitGroup을 통해 고루틴이 완료될 때까지 어떻게 기다리나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!