并发concurrency
gorountine
切换时间来实现“同时”运行,在并行则是利用多核实现多线程的运行,通过通信共享内存
1 | func Go(){ |
Channel
channel 是 goroutine 沟通的桥梁,大都是阻塞同步的,通过 make 创建,close 关闭,channel 是引用类型,使用 for range 来迭代不断操作 channel ,可设置单向或双向通道,缓存大小,在未被填满之前不会发生阻塞
1 | func main() { |
for range
1 | func main() { |
缓存
1 | c := make(chan bool, 1) |
有缓存时同步阻塞的,无缓是异步的
多核运行
1 | func Go(c chan bool, index int) { |
同步 sync.WaitGroup
1 | func Go(wg *sync.WaitGroup, index int) { |
Select
可处理一个或多个 channel 的发生与接收,同时有多个可用的 channel 时按随机顺序处理,可用空的select来阻塞 main 函数,可设置超时
1 | func main() { |
互相发送
1 | func Pingpong() { |