使用 go 限制并发执行的任务
如何在 go 中并发执行任务,同时控制并发数量是一个常见的问题。这个问题要求限制并发执行 100 个任务的数量,每次最多只执行 40 个。
协程池解决方案
一个可行的解决方案是使用协程池。协程池是一个预分配协程集合,可以用来并行执行任务。go 标准库中没有直接提供协程池,但是有很多第三方库可以实现这个功能。
非协程池解决方案
如果你不想使用第三方协程池,也可以通过使用通道和同步原语来实现类似的功能。以下是一个示例代码:
package main import ( "fmt" "sync" ) func main() { max := 40 // 最大协程数量限制 tasks := 100 // 任务数量 wg := sync.WaitGroup{} ch := make(chan struct{}, max) for i := 0; i < tasks; i++ { wg.Add(1) // 添加计数 ch <- struct{}{} // 写一个标记到 chan,chan缓存满时会阻塞 go func(j int) { defer func() { wg.Done() // 将计数减1 <-ch // 读取chan }() fmt.Println(j) }(i) } wg.Wait() // 等待加入的协程全部完成 fmt.Println("done...") }
在这个例子中:
程序的工作原理如下:
以上就是如何使用 Go 语言限制并发执行的任务数量,并保证每次最多只执行 40 个任务?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号