請問 creatework中 for循環的生命週期

来源:16-2 简单调度器

augustine96

2019-01-01

請問
func createWorker(out chan ParseResult, s Scheduler) {
in := make(chan Request)
go func() {
for {
// tell scheduler i am ready
s.WorkerReady(in)
request := <-in
result, err := worker(request)
if err != nil {
continue
}
out <- result
}
}()
}

代碼中 go func 中的 for循環 何時 生命週期會結束

写回答

1回答

ccmouse

2019-01-07

这个for循环永远不会结束。但因为他是在一个go func的函数体里面,go func会开一个goroutine,他会和main并发执行。

所以,这个createWorker执行非常快,只是创建了一个goroutine,然后立刻返回。而这个goroutine就会一直运行下去,直到整个程序退出,也就是main函数运行结束。

当然,我们如果想让这个goroutine退出的话,也可以给他一个特殊的退出channel,他在for里面如果从退出channel收到东西,就break出来。比如:

exitChan := make(chan bool)

go func(chan bool){

...

}(exitChan)


0
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程