CSP併發模型

不要以共享內存的方式來通信,相反,要通過通信來共享內存
Go語言的併發模型參考的是CSP理論(Go推薦的,通信順序進程,一種併發編程模型),另一種就是多線程共享內存,在訪問共享數據時,通過鎖來訪問,因此衍生出了許多方便的數據結構,叫做“線程安全的數據結構”。

Go的CSP併發模型
CSP = goroutine + Channel

Goroutine
實際併發執行的實體,它底層是使用協程(coroutine)實現併發,coroutine是一種運行在用戶態的用戶線程,go底層選擇使用coroutine的出發點是因爲,它具有以下特點:
用戶空間 避免了內核態和用戶態的切換導致的成本
可以由語言和框架層進行調度
更小的棧空間允許創建大量的實例
而goroutine是在golang層面提供了調度器,並且對網絡IO庫進行了封裝,屏蔽了複雜的細節,對外提供統一的語法關鍵字支持,簡化了併發程序編寫的成本

channel
它是被單獨創建並且可以在進程之間傳遞,一個實體通過將消息發送到channel 中,然後又監聽這個 channel 的實體處理,兩個實體之間是匿名的,這個就實現實體中間的解耦,其中 channel 是同步的一個消息被髮送到 channel 中,最終是一定要被另外的實體消費掉的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章