如何優雅地等待Go 程式完成
在Go 中,並發是透過goroutine 實現的,goroutines 是與以下進程同時運行的輕量級線程主要例程。為了確保程式不會在所有 goroutine 完成其任務之前退出,正確等待它們完成至關重要。
使用 Channel 來發出完成訊號
等待 goroutine 的常見方法是使用布林通道。當 goroutine 完成其任務時,它會向通道發送一個 true 值,主例程透過從通道接收該值來等待該值。
為什麼
如果我們取消最後一行註解會發生什麼事?
如果我們取消最後一行的註釋,我們會收到死鎖錯誤,因為通道是空的並且沒有其他 goroutine 向其發送值。因此,主例程將無限等待接收值,從而導致死鎖。
使用同步套件的替代方法
對於更複雜的並發場景,sync套件提供了方便的同步機制。例如,如果您需要並行化一系列長時間運行的函數,以下程式碼片段示範如何使用sync.WaitGroup類型:
在此範例中,WaitGroup確保主例程在所有goroutine 中調用wg.Done 之前不會退出。
以上是如何優雅地等待 Go 例程完成?的詳細內容。更多資訊請關注PHP中文網其他相關文章!