【发布时间】:2016-09-28 02:01:06
【问题描述】:
这是我的问题:调用者将创建几个 goroutine 来运行我的代码 doWork,
go func() {
for data := range dataSet {
doWork(data)
}
}()
现在,我想计算有多少 goroutines 开始执行这项工作,尽管我无法修改或读取调用者的数据。我怎样才能做到这一点?
[update] doWork 传递给调用者,例如:
doWork := func(i int) {
testArray[i]++
...
}
Parallelize(workerNumber, doWork)
所以我打算使用一个全局变量作为计数器。
【问题讨论】:
-
如何计算一个在 doWork 返回之前开始和结束的 goroutine?
-
您可以使用
runtime.NumGoroutine()查询当前存在的goroutines 的数量。如果您可以限制不在代码的其他部分启动新的 goroutine(同时不完成任何部分),这可能会有所帮助,否则它不会“准确”(它不会是您想要的)。除非来电者给你更多的“洞察力”,否则你不会得到比这更好的帮助。实际上你不应该关心。代码的正确性不应该取决于调用它的 goroutine 的数量:它要么是 safe 用于并发使用(然后没关系),要么不是。 -
你想达到什么目的?你真的想知道计数还是只想控制它们?因为你可以更好地使用频道或同步组
-
我想统计 goroutine 的数量,这是我的指标的一部分