91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

go語言為什么支持高并發

發布時間:2022-12-27 14:21:44 來源:億速云 閱讀:134 作者:iii 欄目:編程語言

本篇內容介紹了“go語言為什么支持高并發”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

原因:go語言在設計的時候從關鍵字層面實現了多協程開發。go語言實現了CSP并發模型做為并發基礎,底層使用goroutine做為并發實體,goroutine非常輕量級可以創建幾十萬個實體;實體間通過channel繼續匿名消息傳遞使之解耦,在語言層面實現了自動調度,這樣屏蔽了很多內部細節,對外提供簡單的語法關鍵字,大大簡化了并發編程的思維轉換和管理線程的復雜性。

go的傳說

坊間對于Go的傳說不可謂不多,“天生支持高并發,執行速度接近C,網絡服務接近Nginx……”。其它還好,唯獨難理解的是“天生支持高并發”,尤其是“天生”二字,著實讓人感到滿滿的高端和神秘。

我們先來看看在go中實現并發操作到底有多簡單,來看代碼:

func main()  {
   go add(3,6)  
   go add(1,6)  
   time.Sleep(time.Second)}func add(a int,b int)  {
   result := a+b
   fmt.Println(result)}

go關鍵字實現了協程開辟調用,如果不進行等待,主線程結束,協程就會馬上結束。

go的并發

其實go語言中的goroutine就是參考的(Communicating Sequential Process)模型,原始的CSP中channel里的任務都是立即執行的,而go語言為其增加了一個緩存,即任務可以先暫存起來,等待執行進程準備好了再逐個按順序執行。

但其實go語言并沒有完全實現了CSP模型的所有理論,僅僅是借用了 process和channel這兩個概念。process是在go語言上的表現就是 goroutine 是實際并發執行的實體,每個實體之間是通過channel通訊來實現數據共享。

1)goroutine

Goroutine 是go實際并發執行的實體,它底層是使用協程(coroutine)實現并發,coroutine是一種運行在用戶態的用戶線程,go底層選擇使用coroutine的出發點是因為,它具有以下特點:

  1. 用戶空間 避免了內核態和用戶態的切換導致的成本

  2. 可以由語言和框架層進行調度

  3. 更小的棧空間允許創建大量的實例

2)channel

go中使用了 CSP中的 channel 。channel 是被單獨創建并且可以在進程之間傳遞,它的通信模式類似于 boss-worker 模式的,一個實體通過將消息發送到channel 中,然后又監聽這個 channel 的實體處理,兩個實體之間是匿名的,這個就實現實體中間的解耦,其中 channel 是同步的一個消息被發送到 channel 中,最終是一定要被另外的實體消費掉的,在實現原理上其實是一個阻塞的消息隊列。

3)調度器

goroutine是在golang層面提供了調度器,在調度器加入了steal working 算法 ,goroutine是可以被異步搶占,因此沒有函數調用的循環不再對調度器造成死鎖或造成垃圾回收的大幅變慢。并且go對網絡IO庫進行了封裝,屏蔽了復雜的細節,對外提供統一的語法關鍵字支持,簡化了并發程序編寫的成本。

“go語言為什么支持高并發”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

米易县| 瑞丽市| 湖州市| 九台市| 沂源县| 铅山县| 镇赉县| 沐川县| 宿州市| 通道| 南阳市| 长治市| 平利县| 德兴市| 嘉峪关市| 织金县| 尚义县| 淮滨县| 玉林市| 库车县| 安新县| 开化县| 中江县| 左权县| 涿州市| 江西省| 广丰县| 准格尔旗| 太湖县| 乌审旗| 城步| 湖南省| 新蔡县| 广宗县| 北海市| 青冈县| 清镇市| 蒙城县| 仁寿县| 黑河市| 巴东县|