go并發(fā),只需要通過 go 關(guān)鍵字來開啟 goroutine 即可。
goroutine 是輕量級(jí)線程,goroutine 的調(diào)度是由 Golang 運(yùn)行時(shí)進(jìn)行管理的。
goroutine 語法格式:
go 函數(shù)名( 參數(shù)列表 )
go f(x,y)
Go 允許使用 go 語句開啟一個(gè)新的運(yùn)行期線程, 即 goroutine,以一個(gè)不同的、新創(chuàng)建的 goroutine 來執(zhí)行一個(gè)函數(shù)。 同一個(gè)程序中的所有 goroutine 共享同一個(gè)地址空間。
Go語言提供的是另一種通信模型,即以消息機(jī)制而非共享內(nèi)存作為通信方式。
channel是Go語言在語言級(jí)別提供的goroutine間的通信方式。我們可以使用channel在兩個(gè)或多個(gè)goroutine之間傳遞消息。
channel是進(jìn)程內(nèi)的通信方式,因此通過channel傳遞對(duì)象的過程和調(diào)用函數(shù)時(shí)的參數(shù)傳遞行為比較一致,比如也可以傳遞指針等。
如果需要跨進(jìn)程通信,我們建議用分布式系統(tǒng)的方法來解決,比如使用Socket或者HTTP等通信協(xié)議。Go語言對(duì)于網(wǎng)絡(luò)方面也有非常完善的支持。
channel是類型相關(guān)的。也就是說,一個(gè)channel只能傳遞一種類型的值,這個(gè)類型需要在聲明channel時(shí)指定。如果對(duì)Unix管道有所了解的話,就不難理解channel,可以將其認(rèn)為是一種類型安全的管道。