【Go】Channel实现原理
1.不同于传统意义上并发编程需要共享内存,Goroutine的channel采用消息模型避免直接的内存共享,降低了信息处理的复杂度
2.Channel只涉及传指针,因为make(chan)返回的是指针类型
- chan := make(chan int) //初始化一个int类型的chan
- chan <- v // 把v发送到通道chan
- v := <- chan // 从chan接受数据并赋值给v
发送数据到channel主要就是做两件事:
- 如果没有可用的reciever, 数据入列,否则线程阻塞
- 如果有可用reciever,把数据从sender的栈空间拷贝到reciever的栈空间