首页 > 后端开发 > Golang > Go 中如何保持同时运行的 Goroutine 数量恒定?

Go 中如何保持同时运行的 Goroutine 数量恒定?

Patricia Arquette
发布: 2024-12-02 00:49:14
原创
915 人浏览过

How to Maintain a Constant Number of Simultaneously Running Goroutines in Go?

Go 中的线程 Goroutine:同时运行恒定数量

Go 并发领域提供了大量关于等待指定数量的 Goroutine 完成的材料。然而,一个明显的挑战出现了:确保连续执行预定义数量的 goroutine,一个开始另一个结束。

考虑一个具有大量任务的场景,例如处理从 MySQL 检索的数据数据库。一种简单的方法可能会启动大量并行 goroutine,同时执行数十万个任务。相反,所需的行为将并发运行的 goroutine 限制为固定数量(例如 20)。

这种受控并发模式称为“有界并行性”。在 Go 中实现这种模式需要使用一个空结构通道作为信号量,指示并发工作协程的最大数量。这是一个例子:

package main

import "fmt"

func main() {
    maxGoroutines := 10
    guard := make(chan struct{}, maxGoroutines)

    for i := 0; i < 30; i++ {
        guard <- struct{}{} // blocks if guard channel is full
        go func(n int) {
            worker(n)
            <-guard // unlocks a slot in guard
        }(i)
    }
}

func worker(i int) { fmt.Println("doing work on", i) }
登录后复制

这个实现确保并发执行的 goroutine 数量不超过指定数量。结果,当一个worker goroutine完成时,一个新的goroutine会立即启动,从而维持所需的并发级别。

“Go并发模式”文章在“有限并行性”部分进一步探讨了这个概念,提供了更深入的了解深入了解这一关键的并发技术。

以上是Go 中如何保持同时运行的 Goroutine 数量恒定?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板