首頁 > 後端開發 > Golang > 如何優雅地等待 Go 例程完成:布林通道 vs.sync.WaitGroup?

如何優雅地等待 Go 例程完成:布林通道 vs.sync.WaitGroup?

DDD
發布: 2024-12-05 14:45:12
原創
930 人瀏覽過

How to Gracefully Wait for Go Routines to Finish: Boolean Channels vs. sync.WaitGroup?

如何優雅地等待 Go 例程完成

使用 Go 進行開發時,確保例程在退出程序之前完成至關重要。利用布林通道(如提供的 Playground 連結中所示)可以有效地實現此目的。

理解通道操作

阻塞操作

處理死鎖場景

取消註解最後一行,

替代方法

而布林通道方法是一個簡單的解決方案,sync 套件提供了用於協調並發操作的附加選項。考慮以下程式碼:

package main

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

func main() {
    var wg sync.WaitGroup
    for i := 0; i < 10; i++ {
        wg.Add(1)
        go func() {
            longOp()
            wg.Done()
        }()
    }
    // Waits until all routines complete (wg.Done called 10 times)
    wg.Wait()
}

func longOp() {
    time.Sleep(time.Second * 2)
    fmt.Println("Long operation completed")
}
登入後複製

在這種情況下,sync.WaitGroup 用於追蹤和同步並發例程,確保 main() 等待所有例程完成後再繼續執行。

以上是如何優雅地等待 Go 例程完成:布林通道 vs.sync.WaitGroup?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板