gpt4 book ai didi

go - 从另一个 goroutine 启动一个 goroutine 是什么意思?

转载 作者:数据小太阳 更新时间:2023-10-29 03:44:46 25 4
gpt4 key购买 nike

来自 this file ,我不明白为什么函数startWorker会这样写:

func (p *WorkerPool) dispatch() {
for i := 0; i < p.maxWorkers; i++ {
p.taskQueue[i] = make(chan func())
go startWorker(p.taskQueue[i])
}
}
func startWorker(taskChan chan func()) {
go func() {
var task func()
var ok bool
for {
task, ok = <-taskChan
if !ok {
break
}
// Execute the task.
task()
}
}()
}

如果我是开发者,我会这样写这个函数:

func startWorker(taskChan chan func()) {
var task func()
var ok bool
for {
task, ok = <-taskChan
if !ok {
return
}
// Execute the task.
task()
}
}

最佳答案

根据 Go Best Practices Francesc Campoy Flores 你的陈述是正确的。启动一个同时启动另一个的 goroutine 是多余的。

func (p *WorkerPool) dispatch() {
for i := 0; i < p.maxWorkers; i++ {
p.taskQueue[i] = make(chan func())
go startWorker(p.taskQueue[i])
}
}

这就是它在图书馆中的使用方式。在 startWorker 中删除 go routine 是有意义的。

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

关于go - 从另一个 goroutine 启动一个 goroutine 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56696191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com