精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Golang 的 GMP:并發編程的藝術

開發 后端
通過 GMP 的組合,Golang 實現了一種高效的并發模型。它充分利用了多核處理器的優勢,并通過輕量級的 Goroutine 實現了高并發的編程模式。但是GPM到底是怎么工作的呢?今天這篇文章就為您解開GPM的神秘面紗。

前言

在 Golang 的并發編程中,GMP 是一個重要的概念,它代表了 Goroutine、M(線程)和 P(調度器)。這個強大的三位一體的并發模型使得 Golang 在處理并發任務時非常高效和靈活。通過 GMP 的組合,Golang 實現了一種高效的并發模型。它充分利用了多核處理器的優勢,并通過輕量級的 Goroutine 實現了高并發的編程模式。但是GPM到底是怎么工作的呢?今天這篇文章就為您解開GPM的神秘面紗。

調度器的由來

單進程系統

早期的計算機都是單進程操作系統,各個進程之間都是順序執行,也就是進程A執行完了才能執行進程B。

「對于cpu來說,進程和線程是一樣的,這里我們就不討論進程和線程的區別了」。

存在的問題
  • 單一執行流程,計算機只能一個任務一個任務的處理。
  • 如果進程A阻塞,會帶來很多cpu浪費的時間。

多進程/線程操作系統

基于以上的問題,于是就出現了多進程/線程操作系統。

  • 系統把cpu分成了一段一段的時間片(微妙級別)。
  • cpu在第一個時間片執行進程A,然后切換到進程B執行,再切換到進程C,一直這樣輪詢的執行。
  • 因為cpu被分成的時間片是微妙級別的,所以直觀的感覺就是進程A,B,C是在同時執行的。
  • 多進程/線程操作系統的確解決了阻塞的問題,但是又出現了新的問題。
存在的問題
  • 因為cpu需要不斷地進程A,B,C之間切換,切換肯定避免不了各種復制,計算等消耗,所以在切換過程中浪費掉了很多時間成本,所以「進程/線程越多」,切換「成本就越大」,也就越「浪費」。
  • 在這種模式下運行CPU在切換動作上浪費的時間成本大概是40%,只有60%的時間是在執行程序。

  • 進程和線程對內存的占用是比較大的,在32位的操作系統中,進程占用的虛擬內存大概是4GB,現成占用內存大概是4M。

協程的誕生

對于一個線程來說其實分為兩部分,「用戶空間」和「內核空間」。

  • 內核空間主要是指操作系統底層,包括進程開辟,分配物理內存資源,磁盤資源等。
  • 用戶空間主要是編碼業務邏輯部分。

  • 于是有人想到能不能把線程的內核空間和用戶空間分開。并且讓他們互相綁定在一起

  • 對于cpu來說,只需要關注內核空間的線程就可以了

當然如果只是這樣把用戶空間的協程和內核空間的線程一一綁定還是沒有解決問題的,如果開啟的比較多,那么對應的線程也會跟著一起增加,cpu頻繁切換的問題還是沒有解決,于是就引入了「調度器」的概念

引入調度器來在各個協程之間切換,cpu只需要關注內核空間的線程即可,這樣「解決了cpu在各個協程之間不斷切換的問題」。

存在的問題

這樣設計雖然解決了cpu頻繁切換的問題,但是如果協程A發生了阻塞,肯定會導致協程B無法被執行。而且如果計算機是多核,那么是無法利用到多核的優勢的。顯然是不合理的。

對于多核的計算機,在內核空間可以開啟多個線程(具體開啟幾個由計算內核決定,人為無法控制),所以問題的核心點就轉移到了協程調度器上面,不管是什么語言,「協程調度器」做的越好,相對的「cpu利用率」也就越高。

go對協程的處理

內存控制和靈活調度

  • 首先golang對協程改名為gorountine,并且把多余的空間都去掉,控制每個協程的內存在幾KB大小,所以golang可以開啟大量協程。
  • golang對協程的調度非常靈活,可以經常在各個協程之間切換。

go對早期調度器的處理(GM模型)

golang在早起調度器處理是比較簡單的,具體流程如下:

  • 首先會有一個全局的go協程隊列,并且加鎖,防止資源競爭。
  • M獲取鎖之后會去嘗試執行gorountine,執行完畢再把gorountine重新放回隊列中。

GM模型存在以下問題

  • 創建、銷毀、調度G都需要每個M獲取鎖,這就形成了激烈的鎖競爭。
  • M轉移G會造成延遲和額外的系統負載。
  • 系統調用(cpu在M之間切換)導致頻繁的線程阻塞和取消阻塞操作增加了系統開銷。
  • 比如我再一個G中又開辟了一個G1,那么G1和G當然在一個M上執行是比較合適的,因為存在一些共享內存,但是顯然這種調度模式是無法做到的 基于以上問題,golang針對這塊做了一些改進,也就是我們今天的主角,GMP模型。

GMP模型

GMP模型簡介

GMP模型主要指的是G(gorountine協程),M(thread線程),P(processor處理器)之間的關系

全局隊列

存放等待運行的G。

P的本地隊列

  • 存放等待運行的G。
  • P的本地隊列存放的G是有數量限制的,一般是不超過256G。
  • 如果創建一個G,是會優先放在p的本地隊列中,如果滿了則會放到全局隊列中去。

P列表

  • 在程序啟動的過程時創建。
  • 最多有GOMAXPROCS個(可配置)。
  • 可以通過環境變量$GOMAXPROCS來設置P的個數,也可以在程序中通過runtime.GOMAXPROCS()來設置。

M列表

  • 當前操作系統分配到當前go程序的內核線程數。
  • go語言本身,限制M的最大數量是10000。
  • 可以通過runtime/debug包中的setMaxThreads來設置。
  • 如果有一個M阻塞,則會創建一個新的M。
  • 如果有M空閑,那么會回收或者睡眠。

調度器的設計策略

復用線程

work stealing機制

  • M1對應的P上面G1正在執行,G2和G3處于等待中的狀態。
  • M2對應的P處于空閑狀態。

這種情況下M2對應的P會從M1對應的P的本地隊列中把G3偷取過來執行,提高CPU的利用率,這種機制叫做「work stealing機制」。

hand off機制

如果M1和M2都在正常執行,但是M1對應的G1發生了阻塞,那么勢必會影響到G2的執行,那么GMP是如何解決的呢?

  • golang會新創建一個M3,用來接管之前的P1剩下的G(G2)。
  • M1和G1進行綁定再繼續執行,執行完畢之后把M1設置為睡眠狀態等待下一次被利用,或者直接銷毀。

并行利用

并行利用其實比較好理解,其實也就是開啟了多少個P,P的個數是有GOMAXPROCS來決定的,一般都會設置為 「CPU核數/2」。

搶占策略

對于傳統的co-routine來說,如果一個C和cpu進行了綁定,那么只有他主動釋放,另外一個C才能和cpu進行綁定。但是在golang中,如果一個G和cpu進行了綁定,那么時間限制最多為10ms,另外一個G就可以直接和cpu綁定。

搶占策略

全局隊列

  • 全局隊列的本質是對work stealing的一種補充。
  • 如上圖,M2對應的本地隊列沒有G,會優先從M1的本地隊列中偷取。
  • 如果M1的本地隊列中也沒有G,那么就會從全局隊列中去偷取G3。
  • 因為全局隊列涉及到加鎖和解鎖,所以效率相對要低一些。

go的啟動周期(M0和G0)

要想了解go的啟動周期,首先得了解M0和G0的概念。

M0

  • 在一個進程中是唯一的。
  • 啟動程序后編號為0的主線程。
  • 在全局變量runtime.m0中,不需要在heap上分配。
  • 負責初始化操作和啟動第一個G。
  • 啟動第一個G之后,M0就和其他的M一樣了。

G0

  • 在一個線程中是唯一的。
  • 每次啟動一個M,都會第一個創建的gorountine,就是G0。
  • G0僅僅用于負責調度其他G,G0不指向任何可執行的函數。
  • 每個M都會有一個自己的G0。
  • 在調度或者系統調用的時候,會使用M切換到G0來調度。
  • M0的G0會放在全局空間。

執行流程

package main
import "fmt"

func main() {
 fmt.Println("Hello World")
}

比如我們看上斷代碼的執行流程。

初始化操作

在執行到main函數之前,會有一些初始化的操作,比如創建M0,創建G0等等。

執行具體函數

當執行main函數的時候,M0已經和其他的M是一樣的了,main函數會進入M0對應的p的本地隊列中,然后和M0綁定執行,如果執行超時(10ms),則會重新放到M0對應的本地隊列中。一直到執行到exit或者panic為止

責任編輯:姜華 來源: 程序員小飯
相關推薦

2023-05-22 09:27:11

GMPGolang

2024-07-30 12:24:23

2024-04-11 07:40:55

Go并發編程

2024-05-06 07:53:09

Go并發編程

2024-09-02 09:00:59

2023-10-27 07:47:58

Java語言順序性

2023-10-12 09:46:00

并發模型線程

2025-08-06 01:22:00

并發編程數據

2022-08-21 07:30:55

程序并發Golang編碼

2014-12-09 14:52:42

編程

2023-03-03 15:37:32

GMP 模型goroutine

2010-08-18 09:14:34

編程語言

2024-03-26 11:54:35

編程抽象代碼

2022-03-07 16:30:10

數據庫ORM開發人員

2024-07-03 11:01:55

2022-04-13 08:23:31

Golang并發

2025-03-28 02:50:00

2023-10-27 07:47:37

計算機內存模型

2010-10-14 10:43:43

編程

2025-06-17 09:32:15

點贊
收藏

51CTO技術棧公眾號

亚欧精品在线视频| 日韩av不卡在线播放| 国产一级一片免费播放放a| 99热这里只有精品首页| 亚洲成人在线网站| 日韩精品久久久免费观看| 91亚洲视频在线观看| 亚洲一级网站| 日日狠狠久久偷偷四色综合免费| 欧美人与性动交α欧美精品| 成年美女黄网站色大片不卡| 亚洲欧美日韩国产一区二区三区| 久久手机视频| 国产免费视频一区二区三区| 国产精品腿扒开做爽爽爽挤奶网站| 中文字幕亚洲欧美日韩高清| 欧美夫妇交换xxx| 成人国产一区二区三区精品麻豆| 亚洲国产精品精华液网站| 日韩性感在线| 午夜成人免费影院| 国产精品1区2区3区在线观看| 国产不卡av在线免费观看| www.av视频在线观看| 久久久久久久久久久9不雅视频| 日韩精品极品视频| 国产精品日日摸夜夜爽| 91精品国产一区二区在线观看| 欧美午夜激情小视频| 嫩草影院中文字幕| 1区2区3区在线视频| 欧美极品少妇xxxxⅹ高跟鞋| 精品1区2区| www国产在线| 国内久久婷婷综合| 国产综合久久久久久| 天堂网视频在线| 99亚洲一区二区| 久久久亚洲国产| 欧美精品久久久久性色| 亚洲91精品| 日韩在线精品视频| 黄色一级片一级片| 欧美偷拍综合| 在线观看欧美成人| 中字幕一区二区三区乱码| 蜜臀91精品国产高清在线观看| 亚洲国产欧美日韩精品| 国产视频精品视频| 丁香5月婷婷久久| 精品久久久久香蕉网| 妖精视频在线观看| www.爱久久| 亚洲成人网在线观看| 国产女主播在线播放| 日韩一区二区三区精品| 7777女厕盗摄久久久| 午夜免费看毛片| 亚洲成人高清| 制服视频三区第一页精品| 91热视频在线观看| 欧美日本三级| 欧美精品一区二区三区久久久| 久久久精品人妻一区二区三区| 亚洲超碰在线观看| 亚洲国产91精品在线观看| 亚洲制服丝袜在线播放| 日韩美女毛片| 亚洲香蕉伊综合在人在线视看| 自拍偷拍视频亚洲| 日韩.com| 欧美成aaa人片免费看| 91aaa在线观看| 一区二区毛片| 国产精品久久久久久久美男| 中文字幕在线观看视频一区| 紧缚捆绑精品一区二区| 99一区二区三区| 午夜视频免费看| 久久精品人人做人人爽97| 亚洲精品久久区二区三区蜜桃臀| 欧美videos极品另类| 亚洲综合精品久久| 波多野结衣家庭教师视频| yiren22亚洲综合| 日韩亚洲欧美成人一区| 亚洲国产综合视频| 97精品国产| 国产69精品久久久久9| 精品成人无码久久久久久| 国内精品在线播放| 免费在线一区二区| 麻豆传媒免费在线观看| 午夜精品久久久久影视| 最新天堂中文在线| 美女主播精品视频一二三四| 在线免费观看羞羞视频一区二区| 久久高清内射无套| 久久大逼视频| 99久久无色码| 亚洲图片88| 午夜精品久久久久久久久久久| 亚洲成人福利在线观看| 波多野结衣欧美| 中文字幕欧美国内| 日韩福利片在线观看| 久久国产欧美日韩精品| 久久精品五月婷婷| 97超碰资源站在线观看| 91久久精品一区二区三区| 少妇精品无码一区二区| 日韩精品一区二区久久| 538国产精品视频一区二区| 国产精品美女一区| 国产欧美一区二区三区沐欲| 粉嫩av一区二区三区天美传媒| 欧美美女日韩| 亚洲国产福利在线| 熟女少妇a性色生活片毛片| 欧美一级二区| 国外成人免费视频| 91麻豆一二三四在线| 欧美日韩精品一区二区天天拍小说| a级一a一级在线观看| 91久久高清国语自产拍| 国产精品对白刺激| 三级视频在线| 五月天婷婷综合| 少妇高潮一69aⅹ| 久久影视一区| 国产精品免费视频久久久| 三级在线观看| 欧美日韩午夜激情| xfplay5566色资源网站| 欧美日韩日本国产亚洲在线| 国产欧美中文字幕| 日韩在线观看www| 欧美日韩视频第一区| 精品人妻一区二区三区蜜桃视频| 日韩午夜免费| 国内成+人亚洲| caoprom在线| 亚洲国产精品字幕| 国产成人亚洲精品自产在线| 粉嫩在线一区二区三区视频| 国产91在线亚洲| 奇米一区二区| 欧美大片在线影院| 免费观看黄一级视频| 一个色在线综合| 91人妻一区二区三区| 亚洲欧美亚洲| 国产精品久久久久久久小唯西川| 手机av免费在线| 欧美精品一区二区三区视频| 日韩激情在线播放| 久久午夜国产精品| www黄色在线| 97精品国产| 亚洲qvod图片区电影| 天天色天天射天天综合网| 日韩欧美一级二级三级久久久 | 亚洲日本在线天堂| 欧美性受xxxxxx黑人xyx性爽| 99久久www免费| 91精品国产91久久久久青草| 久久亚洲资源| 亚洲美女动态图120秒| 男人的天堂av网站| 中文字幕亚洲在| 9191在线视频| 99热免费精品在线观看| 午夜精品美女久久久久av福利| 国产情侣一区二区三区| 欧美成人精品一区二区三区| 国产成人三级在线观看视频| 日韩欧美中文字幕在线播放| 亚洲一二三四五六区| 国产成人a级片| 免费高清在线观看免费| 日韩一区欧美| 国产精品制服诱惑| 国产一区二区精品调教| 欧美精品在线免费| 青青草观看免费视频在线| 欧美色精品在线视频| 精品无码人妻一区二区三区品| 久久男人中文字幕资源站| 青青草原国产在线视频| 日韩视频三区| 中文字幕日韩精品一区二区| 国产精品久久久久久久久久白浆| 国产成人av网| 欧美黑人xx片| 尤物精品国产第一福利三区| 成 人 免费 黄 色| 在线观看亚洲成人| 国产午夜福利一区二区| 国产精品伦一区二区三级视频| 可以看的av网址| 日韩av一区二区三区四区| 中文字幕日韩精品无码内射| 国产欧美日韩影院| 国产成人精品福利一区二区三区| 国产又黄又嫩又滑又白| 99se视频在线观看| 欧美一卡二卡三卡| 日韩xxx视频| 亚洲福利视频一区| 亚洲 欧美 变态 另类 综合| 2021中文字幕一区亚洲| 亚洲少妇一区二区| 久久99热这里只有精品| 毛片一区二区三区四区| 亚洲手机在线| 在线观看视频黄色| 成人亚洲一区二区| 欧美精品一区二区三区在线看午夜| 久久国产精品美女| 国产精品专区一| 亚洲人免费短视频| 欧美有码在线视频| 里番在线播放| 欧美精品免费播放| 乱人伦中文视频在线| 国产一区二区三区欧美| 日本中文字幕电影在线观看 | 51精品在线观看| 调教一区二区| 欧美成人激情图片网| 欧美一级二级三级区| 中文字幕免费精品一区高清| 男操女在线观看| 亚洲精品小视频在线观看| 欧美一级淫片aaaaaa| 欧美一级理论片| 99视频国产精品免费观看a| 欧美日韩国产高清一区二区三区| 免费看污视频的网站| 色综合久久天天| 亚洲成人第一网站| 在线观看日韩高清av| 日本一本在线观看| 欧美日韩中字一区| 一级黄色a视频| 制服丝袜亚洲色图| 国产不卡精品视频| 欧美videos大乳护士334| 亚洲第一天堂网| 精品国产亚洲在线| 天天干天天摸天天操| 日韩国产精品视频| 你懂的在线观看| 亚洲最大中文字幕| 黄色网址在线免费观看| 欧美成人精品h版在线观看| 美女精品视频| 91精品国产色综合| 精品免费av在线| 91精品视频免费| 欧一区二区三区| 国产日韩亚洲精品| 伊人久久大香线蕉无限次| 视频一区三区| 欧美永久精品| 浮妇高潮喷白浆视频| 久久久久.com| 中文字幕66页| 成人av资源在线| 成年人在线免费看片| 亚洲色图一区二区| 日本在线视频免费| 在线观看亚洲成人| www五月婷婷| 亚洲欧美成人网| 精品欧美色视频网站在线观看| 欧美国产亚洲视频| 韩国成人漫画| 91在线色戒在线| 欧美日韩一区二区三区在线电影 | 91久久精品美女高潮| silk一区二区三区精品视频 | 97精品人妻一区二区三区蜜桃| 91美女视频网站| 久久成人小视频| 午夜伦欧美伦电影理论片| 中文字幕一级片| 亚洲大尺度美女在线| 99青草视频在线播放视| 欧美激情在线观看| 777午夜精品电影免费看| 懂色中文一区二区三区在线视频| 国产精品入口久久| 亚洲理论电影在线观看| 老司机一区二区| 国产麻豆天美果冻无码视频| 一色屋精品亚洲香蕉网站| 亚洲男人第一av| 欧美精品精品一区| 欧洲毛片在线| 久久久久久久久久久亚洲| 国产精品蜜月aⅴ在线| 久久精品国产一区二区三区日韩| 香蕉视频国产精品| 午夜激情在线观看视频| 成人av免费网站| 亚洲熟女毛茸茸| 一本久久a久久精品亚洲| 黄色aaa毛片| 另类天堂视频在线观看| 高清电影一区| 精品在线不卡| 国产一区清纯| 中文字幕线观看| 欧美韩日一区二区三区四区| 国产小视频在线免费观看| 精品美女在线播放| 97caopor国产在线视频| 国产精品亚洲综合天堂夜夜| 亚洲高清极品| 欧美黑人经典片免费观看| 国产精品亚洲一区二区三区在线 | 国产精品福利网站| 欧美日韩一区二区三区在线电影 | 欧美日韩在线播放一区二区| 国产精品分类| 欧美熟妇另类久久久久久多毛| 国产精品久久福利| 最好看的日本字幕mv视频大全| 日韩成人av在线播放| av资源新版天堂在线| wwwxx欧美| 欧美日韩国产一区精品一区| 午夜免费福利网站| 亚洲天堂中文字幕| 国产伦一区二区| 久久成人精品一区二区三区| 亚洲狼人在线| 一本二本三本亚洲码| 九色综合狠狠综合久久| 亚洲视频重口味| 欧美久久久久久久久| 麻豆网站在线| 91福利视频导航| 欧美日本免费| 中文字幕乱视频| 黄色精品一区二区| 日韩二区三区| 国产精品爱啪在线线免费观看| 狠狠色丁香婷婷综合影院| 久久久久久久少妇| 中文字幕av免费专区久久| 欧美成人一区二区视频| 色婷婷综合成人av| 国产精品高清一区二区| 青青草免费在线视频观看| 国产福利一区二区三区在线视频| 国产亚洲欧美精品久久久www| 亚洲精品一线二线三线无人区| 96av在线| 欧美高清www午色夜在线视频| 国模大尺度视频| 中文字幕免费不卡在线| 91丨porny丨在线中文| 久久久999精品| 成人在线视频中文字幕| 播放灌醉水嫩大学生国内精品| 久久久久久久一区| 亚洲视频在线观看免费视频| 久久综合免费视频| 国产乱论精品| 不卡av免费在线| 亚洲欧美日韩一区二区三区在线观看| 国产夫妻自拍av| 欧洲一区二区视频| 欧美激情偷拍自拍| 农村末发育av片一区二区| 狠狠躁天天躁日日躁欧美| 国产免费av高清在线| 91美女片黄在线观看游戏| 最新日韩欧美| 日本黄色小视频在线观看| 欧美一卡二卡三卡四卡| 亚洲欧美小说色综合小说一区| 亚洲成人自拍视频| 高清不卡一区二区在线| 高潮毛片又色又爽免费| 日韩在线播放一区| 久久九九热re6这里有精品| 黄色在线视频网| 亚洲妇女屁股眼交7| av影片免费在线观看| 成人三级在线| 日韩电影在线免费看| 久久视频免费看| 中文字幕精品一区久久久久| 成人自拍在线| 蜜臀一区二区三区精品免费视频 | 成人av在线不卡| 欧美激情一区二区三区全黄|