Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从另一个goroutine开始goroutine的意义是什么?_Go - Fatal编程技术网

从另一个goroutine开始goroutine的意义是什么?

从另一个goroutine开始goroutine的意义是什么?,go,Go,从中,我不理解为什么函数startWorker的编写方式如下所示: func (p *WorkerPool) dispatch() { for i := 0; i < p.maxWorkers; i++ { p.taskQueue[i] = make(chan func()) go startWorker(p.taskQueue[i]) } } func(p*WorkerPool)分派(){ 对于i:=0;i

从中,我不理解为什么函数startWorker的编写方式如下所示:

func (p *WorkerPool) dispatch() {
    for i := 0; i < p.maxWorkers; i++ {
        p.taskQueue[i] = make(chan func())
        go startWorker(p.taskQueue[i])
    }
}
func(p*WorkerPool)分派(){
对于i:=0;i
func startWorker(taskChan-func()){
go func(){
var task func()
var ok bool
为了{
task,ok=根据Francesc Campoy Flores的说法,你的说法是正确的。开始一个goroutine,同时开始另一个goroutine是多余的

func(p*WorkerPool)分派(){
对于i:=0;i
这就是它在库中的使用方式。删除startWorker中的go例程是有意义的


正如Peter在这里提到的,将
go startWorker()
行更改为
startWorker()也是可以的

你应该先重新缩进你的代码。鉴于
startWorker
只从go语句中调用,没有必要
startWorker
也启动一个goroutine。
go funct
用于同时执行类似的工作。它使程序的运行时间更快。@Anshu:不,它不使运行时间更快。@time很快。如果有什么区别的话,它会使运行时间变慢。它所做的是并发运行。按照惯例,名为Start或StartX的方法不会阻塞。例如,请参阅或。我宁愿在调用站点删除go语句。因为这是一种内部用法,所以也可以。我想没有对错的方法。这是我们构建cod的方式E