”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Go 中如何限制 Goroutine 并发执行?

Go 中如何限制 Goroutine 并发执行?

发布于2024-11-10
浏览:578

How to Limit Concurrent Goroutine Execution in Go?

限制并发 Goroutine 执行

考虑一个场景,您有一个要处理的 URL 列表,并且想要限制运行的并发 Goroutine 的数量。例如,如果你有 30 个 URL,你可能只需要 10 个 goroutine 并行工作。

提供的代码尝试使用大小为 parallel 的缓冲通道来限制运行的 goroutine 数量。然而,这种方法在处理完所有 URL 后似乎并没有阻塞。实现这种并发限制的更有效方法是创建指定数量的工作 goroutine 并通过专用通道向它们提供 URL。

这是代码的改进版本:

parallel := flag.Int("parallel", 10, "max parallel requests allowed")
flag.Parse()
urls := flag.Args()

// Create a channel to hold URLs that workers will consume
workerURLChan := make(chan string)

// Start a goroutine to feed URLs to the workers
go func() {
    for _, u := range flag.Args() {
        workerURLChan 

在此更新的代码中,我们为每个允许的并发执行创建一个工作协程,这些工作协程从专用通道获取 URL。一旦所有 URL 都已分发,workerURLChan 就会关闭,这会在当前 URL 完成时触发工作人员退出。这种机制有效地限制了并发运行的goroutines的数量。

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3