함수와 고루틴은 Go 언어에서 다음 메커니즘을 통해 상호 작용합니다. 채널: 고루틴 간 데이터를 안전하게 교환합니다. 파이프: 외부 프로세스와 통신하는 데 사용됩니다.
Go 언어의 함수는 고루틴 메커니즘과 상호 작용합니다.
고루틴 Go 프로그램이 코드를 병렬로 실행할 수 있게 해주는 경량 스레드입니다. Go 런타임에 의해 관리되며 스레드를 수동으로 생성하고 관리할 필요 없이 병렬로 작업을 처리하는 데 사용됩니다.
Go 언어에서 함수와 고루틴 간의 상호 작용은 다음 메커니즘을 통해 이루어집니다.
함수와 고루틴 간의 상호 작용을 보여주기 위해 간단한 병렬 합산 프로그램을 만듭니다:
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) }
이 프로그램에서는 파이프와 뮤텍스 잠금을 사용하여 함수와 고루틴 간의 연결을 구현합니다. 상호 작용:
sum
를 보호하여 데이터 무결성을 보장합니다.이 메커니즘을 통해 고루틴은 합산 작업을 동시에 실행할 수 있으며, 주요 기능은 진행 상황을 추적하고 최종 결과를 수집할 수 있습니다.
위 내용은 golang 함수와 goroutine 간의 상호 작용 메커니즘은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!