天天看點

Go語言之并發程式設計

并發概念

在學校,老師課件上是這樣定義:

并發是指兩個或兩個以上的事件或活動在同一時間間隔内(時間段)發生,在多道程式處理時,宏觀上并發,微觀上交替執行(單處理器)

書本上是這樣定義:(大概意思,記不太清楚了)

處理器在一道程式執行并完成之前,可以執行另一道程式,也就實作了多道程式宏觀的執行

傳統并發—共享記憶體系統

傳統的并發模型是基于記憶體共享的,各線程通信,需要共享變量,也需要鎖的同步機制。共享變量不但要保證原子性,還要保證其他線程能看到修改後的值。(日後補充)

Go語言之并發程式設計

Go并發—消息傳遞系統

與傳統的并發思維不同,Go語言是提倡基于消息傳遞的并發模型,并不共享變量,也沒有鎖的問題。其中就有并發模型,CSP(通信順序程序)

go語言中特有的資料結構也形成了go語言的特點之一,chan通道,通過的此消息通道的傳遞進而使得go的并發獲得了很好的展現。當然go也有傳統并發的機制sync。但是go語言我們是要将其中的特色并發放大。

Message:=make(chan string)
Msg := <- Messages      

通過通過進行資料的傳遞,進而控制多線程之間的運作過程。

在Go語言社群有一句很有名的語句:

不要通過共享記憶體來通信,而應該通過通信來共享記憶體。

并發的内容遠不止這些,再往後的學習中,我也會繼續探索。