在Go语言中,可以使用`sync.WaitGroup`和`chan`来限制最大并发数。 使用`sync.WaitGroup`:`s
在Go语言中,可以使用`sync.WaitGroup`和`chan`来限制最大并发数。
以下是一个使用`sync.WaitGroup`限制最大并发数的示例代码:
package main
import (
"fmt"
"sync"
"time"
)
func main() {
// 设置最大并发数为3
maxConcurrency := 3
// 创建一个等待组
var wg sync.WaitGroup
// 创建一个通道用于控制最大并发数
sem := make(chan struct{}, maxConcurrency)
// 创建10个任务
for i := 0; i < 10; i++ {
wg.Add(1)
// 将任务添加到通道中
sem <- struct{}{}
go func(i int) {
// 执行任务
fmt.Println("Task", i, "start")
time.Sleep(time.Second)
fmt.Println("Task", i, "done")
// 任务完成后从通道中移除
<-sem
// 完成任务
wg.Done()
}(i)
}
// 等待所有任务完成
wg.Wait()
}
以下是一个使用`chan`限制最大并发数的示例代码:
package main
import (
"fmt"
"time"
)
func main() {
// 设置最大并发数为3
maxConcurrency := 3
// 创建一个通道用于控制最大并发数
sem := make(chan struct{}, maxConcurrency)
// 创建10个任务
for i := 0; i < 10; i++ {
// 将任务添加到通道中
sem <- struct{}{}
go func(i int) {
// 执行任务
fmt.Println("Task", i, "start")
time.Sleep(time.Second)
fmt.Println("Task", i, "done")
// 任务完成后从通道中移除
<-sem
}(i)
}
// 等待所有任务完成
for i := 0; i < maxConcurrency; i++ {
sem <- struct{}{}
}
}
这样可以确保同一时间最多同时执行maxConcurrency个goroutine。
--结束END--
本文标题: golang限制最大并发数的方法是什么
本文链接: https://www.lsjlt.com/news/450838.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-04-05
2024-04-05
2024-04-05
2024-04-04
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-04
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0