老师你好,我有2个问题

来源:11-2 使用Channel等待任务结束

_cp

2020-06-08

1.为什么go func 里要用for,和不用for有什么区别
go func() {
for {
doWork(id, w.in, w.done)
//fmt.Printf(“worker %d received %c\n”, id, <-c)
}
}()

2.done <- true 这为啥叫做发送;<-worker.done接收后,为什么goroutine就可以结束

写回答

1回答

ccmouse

2020-06-10

  1. 用for是不断做doWork的意思。不然只做一次就不再做其它任务了。

  2. done<-true就是给done这个channel发送true这个值的意思。那么看接收方,<-worker.done表示从worker.done接收一个值,收到的值我们没有赋值给任何变量。但是在接收的时候,会等待发送方发送。必须等到worker运行到done<-true这一行,才会接收到。这样就通过channel实现了等待任务完成这个能力。

0
1
_cp
非常感谢!
2020-06-10
共1条回复

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

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

5995 学习 · 1909 问题

查看课程