在Go中,可以通過goroutine和channels來實現任務的同步執行。具體步驟如下:
以下是一個簡單的示例代碼:
package main
import "fmt"
func worker(id int, jobs <-chan int, results chan<- int) {
for j := range jobs {
// 執行任務
fmt.Println("worker", id, "started job", j)
// 模擬任務耗時
for i := 0; i < 100000000; i++ {
}
fmt.Println("worker", id, "finished job", j)
// 將結果發送到通道中
results <- j * 2
}
}
func main() {
// 創建任務通道和結果通道
jobs := make(chan int, 5)
results := make(chan int, 5)
// 啟動3個goroutine執行任務
for w := 1; w <= 3; w++ {
go worker(w, jobs, results)
}
// 發送5個任務到任務通道中
for j := 1; j <= 5; j++ {
jobs <- j
}
close(jobs) // 關閉任務通道,表示任務已經發送完畢
// 從結果通道中讀取結果,直到所有任務都完成
for a := 1; a <= 5; a++ {
<-results
}
}
在上面的示例中,我們創建了一個有5個緩沖區的任務通道和一個有5個緩沖區的結果通道。然后,我們啟動了3個goroutine來執行任務,并通過任務通道將任務分發給它們。每個goroutine執行完任務后,將結果發送到結果通道中。
在主goroutine中,我們發送了5個任務到任務通道中,并關閉通道,表示任務已經發送完畢。然后,我們從結果通道中讀取結果,直到所有任務都完成。
這樣就實現了任務的同步執行。