package main import ( "fmt" "time" ) func main() { Demo() } func worker(id int, c chan int) { for { fmt.Println("ha??") fmt.Printf("worker %d received %d \n", id, <-c) fmt.Println("ha!!") } } func Demo() { c := make(chan int, 3) c <- 1 c <- 2 c <- 3 for i := 0; i < 10; i++ { go worker(i, c) } time.Sleep(time.Millisecond) }
请问,worker函数里为什么要写for死循环来执行打印?外面起了10个携程,去掉for死循环结果也是一样的吧?
如果用死循环,生成无限个channel阻塞(<-c) 是不是也损耗资源呢?
还有我的理解顺序是否正确:worker里面的打印会先阻塞掉,等待channel写入。当c<-1,c<-2,c<-3,有写入的时候,上面阻塞掉的携程被唤醒,执行打印。
麻烦老师给与讲解。多谢