Golang的并發(fā)模型是通過goroutine和channel來實現(xiàn)的。
go func() {
// 并發(fā)執(zhí)行的代碼
}()
ch := make(chan 數(shù)據(jù)類型)
發(fā)送和接收數(shù)據(jù)可以使用<-運算符,例如:
ch <- 數(shù)據(jù) // 發(fā)送數(shù)據(jù)到channel
數(shù)據(jù) = <-ch // 從channel接收數(shù)據(jù)
以下是一個使用goroutine和channel實現(xiàn)并發(fā)模型的示例代碼:
package main
import (
"fmt"
"time"
)
func worker(id int, jobs <-chan int, results chan<- int) {
for j := range jobs {
fmt.Println("worker", id, "processing job", j)
time.Sleep(time.Second) // 模擬耗時操作
results <- j * 2
}
}
func main() {
numJobs := 5
jobs := make(chan int, numJobs)
results := make(chan int, numJobs)
// 啟動3個goroutine來處理任務
for i := 1; i <= 3; i++ {
go worker(i, jobs, results)
}
// 發(fā)送任務到jobs channel
for j := 1; j <= numJobs; j++ {
jobs <- j
}
close(jobs)
// 從results channel接收結果
for r := 1; r <= numJobs; r++ {
fmt.Println(<-results)
}
}
在上面的示例中,主函數(shù)創(chuàng)建了兩個channel,一個用來傳遞任務(jobs),一個用來傳遞結果(results)。
然后,主函數(shù)啟動了三個goroutine來處理任務,每個goroutine會從jobs channel中接收任務,并將處理結果發(fā)送到results channel中。
最后,主函數(shù)從results channel中接收結果并打印出來。
這個示例展示了一個簡單的并發(fā)模型,其中多個goroutine并行執(zhí)行任務,并通過channel進行通信和同步。