我看到很多关于如何让 Go 等待 x 个 goroutines 完成的教程和示例,但我想做的是确保总是有 x 个 goroutine 在运行,所以一旦一个 goroutine 结束就会启动一个新的 goroutine .
具体来说,我有几十万个“要做的事情”,它们正在处理一些来自 MySQL 的东西。所以它是这样工作的:
db, err := sql.Open("mysql", connection_string)
checkErr(err)
defer db.Close()
rows,err := db.Query(`SELECT id FROM table`)
checkErr(err)
defer rows.Close()
var id uint
for rows.Next() {
err := rows.Scan(&id)
checkErr(err)
go processTheThing(id)
}
checkErr(err)
rows.Close()
目前,将推出数十万线程processTheThing()。我需要的是最多启动 x 个(我们称之为 20 个)goroutines。因此,它首先为前 20 行启动 20 个,从那时起,它将在当前 goroutine 之一完成时为下一个 id 启动一个新的 goroutine。所以在任何时间点总是有 20 个在运行。
我敢肯定,这是很简单/标准,但我似乎无法找到任何教程或例子或如何做到这一点的一个很好的解释。
郎朗坤
ABOUTYOU
慕姐8265434
相关分类