函數與Goroutine 在Go 語言中透過以下機制互動:通道(Channel):在Goroutine 之間安全交換資料管道(Pipe):用於與外部進程通訊
Go 語言中函數與Goroutine 的交互作用是透過下列機制實現的:package main import ( "fmt" "math/rand" "sync" "time" ) const numIterations = 1000000 func main() { sum := 0 // 初始化互斥锁以保护并发的 sum 变量 lock := &sync.Mutex{} // 创建一个通道 c := make(chan int) // 创建 Goroutine 并发计算和并将结果发送到通道 for i := 0; i < numIterations; i++ { go func(num int) { rand.Seed(time.Now().UnixNano()) time.Sleep(time.Duration(rand.Intn(50)) * time.Millisecond) lock.Lock() defer lock.Unlock() sum += num c <- num }(i) } // 从通道接收数据并打印进度条 for i := 0; i < numIterations; i++ { <-c fmt.Printf("\rProgress: %f%", float64(i)/float64(numIterations)*100) } // 等待所有 Goroutine 完成 time.Sleep(time.Second) fmt.Println("\nFinal sum:", sum) }###在這個程式中,我們使用管道和互斥鎖來實現函數與Goroutine 之間的交互作用:#########互斥鎖保護並發存取的變數###sum###,以確保資料完整性。 ######Goroutine 將求和結果傳送到管道。 ######主函數從管道中讀取結果並列印進度條。 #########透過這種機制,Goroutine 可以並發執行求和任務,而主函數可以追蹤進度並收集最終結果。 ###
以上是golang函數與goroutine互動的機制是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!