温馨提示×

go语言中怎么控制并发数量

go
小亿
106
2024-05-30 18:15:15
栏目: 编程语言

在Go语言中,可以使用goroutine和channel来控制并发数量。可以通过创建一个有限大小的goroutine池来限制并发数量,例如可以使用带有缓冲区的channel来实现。当有任务需要进行并发处理时,首先将任务发送到channel中,然后从channel中取出任务并启动goroutine进行处理。在goroutine处理完任务后,再从channel中获取下一个任务继续处理,这样就可以有效地控制并发数量。

以下是一个示例代码:

package main import ( "fmt" "time" ) func worker(id int, jobs <-chan int, results chan<- int) { for job := range jobs {	fmt.Printf("Worker %d started job %d\n", id, job)	time.Sleep(time.Second)	fmt.Printf("Worker %d finished job %d\n", id, job)	results <- job * 2	} } func main() {	numJobs := 10	numWorkers := 3	jobs := make(chan int, numJobs)	results := make(chan int, numJobs) for i := 1; i <= numWorkers; i++ { go worker(i, jobs, results)	} for j := 1; j <= numJobs; j++ {	jobs <- j	} close(jobs) for r := 1; r <= numJobs; r++ {	<-results	} } 

在这个示例中,我们创建了3个worker goroutine来处理任务,并发数量被限制在3个。我们将10个任务发送到jobs channel中,worker从jobs channel中取出任务进行处理,处理完后将结果发送到results channel中。最后我们从results channel中取出所有结果,确保所有任务都被处理完毕。

0