Funktion und Goroutine interagieren über die folgenden Mechanismen in der Go-Sprache: Kanal: Sicherer Datenaustausch zwischen Goroutinen. Pipe: Wird zur Kommunikation mit externen Prozessen verwendet.
Funktionen in der Go-Sprache interagieren mit dem Goroutine-Mechanismus.
Interaktion zwischen Funktionen und Goroutinen
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) }
In diesem Programm verwenden wir Pipes und Mutex-Sperren, um die Verbindung zwischen der Funktion und Goroutine zu implementieren Interaktion:
Ein Mutex schützt Variablen, auf die gleichzeitig zugegriffen wirdsum
Goroutine sendet das Summierungsergebnis an die Pipeline. Das obige ist der detaillierte Inhalt vonWas ist der Mechanismus für die Interaktion zwischen Golang-Funktionen und Goroutine?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!