阅读量:0
在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 %dn", id, job) time.Sleep(time.Second) fmt.Printf("Worker %d finished job %dn", 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中取出所有结果,确保所有任务都被处理完毕。