GO语言并发模型CSP: 提倡 通过通信共享内存,而非通过共享内存实现通信。
如果说 goroutine
是Go程序并发的执行体, channel
就是它们之间的连接。 channel
是可以让一个 goroutine
发送特定值到另一个 goroutine
的通信机制
关闭后任然可以读取
执行:
1 true
2 true
0 false
# 无缓冲通道导致异常
执行:fatal error: all goroutines are asleep – deadlock!
原因:ch := make(chan int) 创建的是无缓冲通道,只有在有地接收值时才会发送成功。
# 通道无空间,继续读取
执行:fatal error: all goroutines are asleep – deadlock!
# 关闭后,任往通道发送
执行:
panic: send on closed channel
执行:
接收成功: 10
发送成功
执行:
发送成功
问题:当发送到chan大于其长度,并且没有消费时,造成死锁
执行:
fatal error: all goroutines are asleep – deadlock!
读取对通道a中的数字,在通道b中平方
执行:
0
1
4
9
16
…
Original: https://www.cnblogs.com/kaituorensheng/p/15863621.html
Author: jihite
Title: GO channel
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/549024/
转载文章受原作者版权保护。转载请注明原作者出处!