温馨提示×

Go语言如何实现并发

小樊
81
2024-12-12 06:09:45
栏目: 编程语言

Go 语言通过 goroutines 和 channels 实现并发。goroutine 是轻量级的线程,它们在 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)

	// 创建 3 个 worker goroutines
	for w := 1; w <= 3; w++ {
		go worker(w, jobs, results)
	}

	// 分发任务
	for j := 1; j <= numJobs; j++ {
		jobs <- j
	}
	close(jobs)

	// 收集结果
	for a := 1; a <= numJobs; a++ {
		<-results
	}
}

在这个示例中,我们创建了一个名为 worker 的函数,它接收一个整数 ID、一个用于接收任务的通道 jobs 和一个用于发送结果的通道 results。我们在主函数中创建了 3 个 worker goroutines,并将它们与 jobsresults 通道关联起来。

接下来,我们通过将任务发送到 jobs 通道来分发任务。当所有任务都发送完毕后,我们关闭 jobs 通道。最后,我们从 results 通道中收集结果,直到通道被关闭。

这个示例展示了如何使用 goroutines 和 channels 实现并发。你可以根据自己的需求调整代码,以适应不同的场景。

0