[管道]
分为 有缓冲和无缓冲两种
无缓冲:
1)接受者与发送者必然存在于两个协程, 否则会造成互相等待 死锁的情况
顺序执行多协程:
var ch1 = make(chan int) var stopFlag = make(chan bool) // 保证两个协程顺序执行 go func() { fmt.Println("g1") time.Sleep(3 * time.Second) ch1 <- 1 }() go func() { <-ch1 fmt.Println("g2") time.Sleep(1 * time.Second) stopFlag <- true }() <-stopFlag fmt.Println("over")
有缓冲:
1.允许同一个协程中, 顺序执行, 但是保证发送的数量与接收的数量相等,否则会造成死锁
[协程]
实例:
go funct(){ ... }()
实现主进程Hold的方式
1)使用无缓冲的channel, 异常情况下实现终止操作,例如gin框架保证服务的异常中断之后的处理
2)使用select{} 即可
标签:之协程,协程,缓冲,chan,golang,死锁,go From: https://www.cnblogs.com/xingxia/p/golang_goroutine_channel.html