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

avatar
作者
筋斗云
阅读量: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中取出所有结果,确保所有任务都被处理完毕。

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!