10-1 channel 为什么要写死循环
来源:11-1 channel

weibo_隱懓_0
2018-02-06
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,有写入的时候,上面阻塞掉的携程被唤醒,执行打印。
麻烦老师给与讲解。多谢
写回答
1回答
-
写死循环是为了一直等待去接收数据,因为产生数据时间是不确定的,只能接收到一个数据之后,继续等待接收数据,在网络接口部分实现也是一个死循环等待请求数据,这里死循环理解成一直等待就行
222018-02-06
相似问题