1、CSP vs Actor
- 和Actor的直接通信不同,CSP模式则是通过channel进行通讯的,更松耦合一些
- Go中channel是有容量限制并且独立于处理Groutine,而如Erlang,Actor模式中的mailbox的容量是无限的,接收进程也总是被动地处理消息
2、多路选择和超时控制
- select
- time.After
3、channel的关闭和广播
- 向关闭的channel发送数据时,会导致panic
- v,ok <- ch;ok为bool值,true表示正常接收,false表示通道关闭
- 所有的channel接受者都会在channel关闭(close(chan))时,立刻从阻塞等待中返回且上述OK值为false。这个广播机制常被利用,进行向多个订阅者同时发送信号。如:退出信号、任务的取消
4、context与任务取消
- 根Context:通过context.Backgroud()创建
- 子Context:context.WithCancel(parentContext)创建
- ctx,cancel := context.WithCancel(context.BackGround())
- 当前Context被取消时,基于他的子Context都会被取消
- 接收取消通知 <- ctx.Done()