go并发
goroutine
Go运行环境管理的轻量级线程
go xxx 启动新的goroutine
channel
有类型的管道,使用-> 和 <-来表示发送和接收,箭头代表数据流的方向
创建
与slice/map一样使用make创建
ch := make(chan int)
默认情况下,在另一端准备好之前,发送和接收都会阻塞,这使得goroutine可以在没有明确锁的情况下保持同步
缓冲
channel可以带缓冲,发送方只有在缓冲区满的时候才会阻塞;接收方在缓冲区清空时接收阻塞
range和close
发送方在发送完成之后可以在close
对应的channel; channel与文件不同,通常情况下不需要关闭,只有在发送方没有更多数据的时候才需要关闭,例如中断一个range
select
使得一个goroutine在多个通信操作上等待;
select会阻塞,直到某个条件分支可以执行
sync.Mutex
互斥操作