golang怎么控制并发数量

   2025-02-15 3430
核心提示:在Go语言中,可以使用goroutine和channel来控制并发数量。首先,可以使用goroutine来并发执行任务。例如,有一个任务列表,每个

在Go语言中,可以使用goroutine和channel来控制并发数量。

首先,可以使用goroutine来并发执行任务。例如,有一个任务列表,每个任务是一个匿名函数,可以使用以下代码并发执行这些任务:

tasks := []func(){}// 填充任务列表...concurrency := 10 // 并发数量semaphore := make(chan struct{}, concurrency)var wg sync.WaitGroupfor _, task := range tasks {    wg.Add(1)    go func(task func()) {        defer wg.Done()        semaphore <- struct{}{} // acquire semaphore        task()        <-semaphore // release semaphore    }(task)}wg.Wait()

在上面的代码中,使用了一个带缓冲的channel作为信号量(semaphore),用于控制并发数量。首先创建一个带缓冲大小的channel,大小为并发数量,用于限制并发的goroutine数量。然后使用semaphore <- struct{}{}来获取信号量,表示可以执行任务。任务执行完后,使用<-semaphore释放信号量,表示任务执行完成。

另外,还可以使用sync.WaitGroup来等待所有任务执行完成。在for循环中,使用wg.Add(1)来添加任务数量,然后在每个goroutine中使用wg.Done()表示任务执行完成。最后使用wg.Wait()等待所有任务完成。

通过以上方式,可以控制并发数量,同时确保所有任务都被执行完毕。

 
 
更多>同类维修知识
推荐图文
推荐维修知识
点击排行
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  网站留言