Go 程式執行順序
此程式碼展示了Go 程式執行順序的概念,其中兩個並發的「go」例程或goroutine ,同時執行,但沒有任何保證的順序。
程式碼定義了一個 sum 函數,它接受一個整數陣列和一個通道作為輸入。此函數計算數組中整數的總和,並將結果傳送到提供的通道。
在 main 函數中,建立了一個通道 c 以便於 goroutine 之間的通訊。啟動兩個 goroutine,每個 goroutine 使用不同的輸入陣列執行 sum 函數,並將結果傳送到 c。
程式然後從通道 c 接收 goroutine 發送的值並列印它們。然而,goroutines 完成的順序是不確定的,因此輸出順序可能會有所不同。
要控制 goroutine 的執行順序,您可以使用各種機制,例如阻塞通道或標準提供的同步原語圖書館。以下是一些例子:
1。阻塞通道:
在此修改版本中,goroutines 透過阻塞主程式來順序執行,直到從通道接收到一個值:
func main() { c := make(chan int) go sum([]int{1, 2, 3}, c) // Block until a value is received from c x := <-c fmt.Println(x) go sum([]int{4, 5, 6}, c) // Block until a value is received from c x = <-c fmt.Println(x) }
2。帶通道的等待群組:
另一個選項是在通道上使用等待群組和範圍,以確保所有goroutine 在處理結果之前已完成執行:
func main() { c := make(chan int) wg := new(sync.WaitGroup) wg.Add(1) go sum([]int{1, 2, 3}, c, wg) wg.Wait() wg.Add(1) go sum([]int{4, 5, 6}, c, wg) wg.Wait() close(c) for x := range c { fmt.Println(x) } }
這些技術可讓您控制goroutine 的執行順序,以在並發程式中實現所需的行為。
以上是如何控制Go例程的執行順序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!