package main
import (
"fmt"
"sync"
)
// Go 使用 sync.WaitGroup 实现并发,使用 channel 控制并发数量
func main() {
// 创建任务
jobs := make([]int, 0)
for i := 1; i <= 10; i++ {
jobs = append(jobs, i)
}
var wg sync.WaitGroup
// 控制并发数量
maxConcurrency := 3 // 并发数
semaphore := make(chan struct{}, maxConcurrency)
// 消费任务
for job := range jobs {
semaphore <- struct{}{} // 获取信号量,占用一个并发槽位
wg.Add(1)
go func(job int) {
defer func() {
<-semaphore // 释放信号量,释放一个并发槽位
wg.Done()
}()
// 处理任务
process(job)
}(job)
}
// 等待所有任务完成
wg.Wait()
fmt.Println("All jobs are done!")
}
func process(job int) {
fmt.Printf("Processing job: %d\n", job)
}
Go 使用 sync.WaitGroup 实现并发,使用 channel 控制并发数量
最新推荐文章于 2024-08-16 22:53:21 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)