go并發(fā)
goroutine
Go運(yùn)行環(huán)境管理的輕量級線程
go xxx 啟動新的goroutine
channel
有類型的管道,使用-> 和 <-來表示發(fā)送和接收,箭頭代表數(shù)據(jù)流的方向
創(chuàng)建
與slice/map一樣使用make創(chuàng)建
ch := make(chan int)
默認(rèn)情況下,在另一端準(zhǔn)備好之前,發(fā)送和接收都會阻塞,這使得goroutine可以在沒有明確鎖的情況下保持同步
緩沖
channel可以帶緩沖,發(fā)送方只有在緩沖區(qū)滿的時候才會阻塞;接收方在緩沖區(qū)清空時接收阻塞
range和close
發(fā)送方在發(fā)送完成之后可以在close對應(yīng)的channel; channel與文件不同,通常情況下不需要關(guān)閉,只有在發(fā)送方?jīng)]有更多數(shù)據(jù)的時候才需要關(guān)閉,例如中斷一個range
select
使得一個goroutine在多個通信操作上等待;
select會阻塞,直到某個條件分支可以執(zhí)行
sync.Mutex
互斥操作