在Go語言中,可以使用goroutines和channels來實現任務并行。goroutines是Go語言的輕量級線程,可以并發執行多個任務。channels則用于在goroutines之間傳遞數據,實現同步和通信。
以下是一個簡單的示例,展示了如何使用goroutines和channels實現任務并行:
package main
import (
"fmt"
"time"
)
func worker(id int, jobs <-chan int, results chan<- int) {
for j := range jobs {
fmt.Printf("Worker %d started job %d\n", id, j)
time.Sleep(time.Second) // 模擬任務執行時間
fmt.Printf("Worker %d finished job %d\n", id, j)
results <- j * 2
}
}
func main() {
const numJobs = 5
jobs := make(chan int, numJobs)
results := make(chan int, numJobs)
// 創建5個goroutines來處理任務
for w := 1; w <= 3; w++ {
go worker(w, jobs, results)
}
// 將任務發送到jobs通道
for j := 1; j <= numJobs; j++ {
jobs <- j
}
close(jobs)
// 收集并打印任務結果
for a := 1; a <= numJobs; a++ {
<-results
}
}
在上面的示例中,我們定義了一個worker
函數,它接受一個ID、一個任務通道和一個結果通道作為參數。worker
函數從任務通道中讀取任務,模擬任務執行時間,然后將結果發送到結果通道。
在main
函數中,我們創建了5個goroutines來處理任務,并將它們啟動。然后,我們將5個任務發送到jobs
通道。接下來,我們關閉jobs
通道,表示沒有更多的任務需要處理。最后,我們從結果通道中讀取并打印任務結果。
運行上述代碼,你將看到5個任務并行執行的情況。每個任務都由一個goroutine處理,它們之間通過jobs
和results
通道進行通信和同步。
這只是一個簡單的示例,你可以根據自己的需求進行擴展和修改。Go語言提供了豐富的并發編程工具和庫,可以幫助你更高效地實現任務并行。