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

揭秘系列:Goroutine調度器

系統(tǒng) 后端
你可能之前聽說過Goroutine調度器,但我們真正了解它是如何工作的嗎?它是如何將Goroutines與線程配對的?現(xiàn)在讓我們一步一步地分解調度器的操作。

現(xiàn)在不要擔心理解上面的圖片,因為我們將從非常基礎的知識開始。

Goroutines分布在線程中,由Goroutine調度器在幕后處理。根據(jù)我們之前的討論,我們知道一些關于Goroutines的事情:

  • 從原始執(zhí)行速度來看,Goroutines不一定比線程更快,因為它們需要一個實際的線程來運行。
  • Goroutines的真正優(yōu)勢在于上下文切換、內存占用、創(chuàng)建和拆除的成本等方面。

你可能之前聽說過Goroutine調度器,但我們真正了解它是如何工作的嗎?它是如何將Goroutines與線程配對的?

現(xiàn)在讓我們一步一步地分解調度器的操作。

一、Goroutine的M:N調度器

Go團隊為我們真正簡化了并發(fā)處理,想想看:創(chuàng)建一個Goroutine就像在函數(shù)前面加上 go 關鍵字一樣容易。

go doWork()

但在這個簡單的步驟背后,有一個更深層的系統(tǒng)在運作。

從一開始,Go并不是簡單地提供了線程。相反,在中間有一個輔助工具,Goroutine調度器,它是Go運行時的關鍵部分。

1*6UyqGhkbOV7kSlRe1CD-gA.png

那么什么是M:N標簽?

它表示Go調度器在將M個Goroutines映射到N個內核線程時所起的作用,形成了M:N模型。你可以擁有更多的操作系統(tǒng)線程,就像可以擁有更多的Goroutines一樣。

在我們深入研究調度器之前,讓我們澄清一下經(jīng)常混淆的兩個術語:并發(fā)和并行。

  • 并發(fā):這是關于同時處理多個任務,它們都在運動,但不總是在同一時刻。
  • 并行:這意味著許多任務在完全相同的時間運行,通常使用多個CPU核心。

1*30ViMAPkVySvdSDc-hI3sA.png

讓我們看看Go調度器是如何與線程配合運作的。

二、PMG 模型

在我們深入研究內部工作原理之前,讓我們分解一下P、M和G代表什么。

1.G(Goroutine)

Goroutine充當Go的最小執(zhí)行單元,類似于輕量級線程。

在Go的運行時中,它由一個名為g的struct{}表示。一旦創(chuàng)建,它會找到一個邏輯處理器P的本地可運行隊列(或G隊列)中的位置,然后P將其交給一個實際的內核線程M。

Goroutines通常存在三種主要狀態(tài):

  • 等待:在這個階段,Goroutine停滯不前,可能因為通道或鎖之類的操作而暫停,或者可能被系統(tǒng)調用暫停。
  • 可運行:Goroutine已經(jīng)準備好運行,但尚未開始運行,它正在等待輪到它在一個線程(M)上運行。
  • 運行:現(xiàn)在,Goroutine正在一個線程(M)上積極執(zhí)行。它會一直執(zhí)行,直到任務完成,除非調度器中斷它或其他原因阻止了它的執(zhí)行。

1*U62eyES6_koQtsv_9jWKHw.png

Goroutines并不僅僅被使用一次然后被丟棄。

相反,當啟動新的Goroutine時,Go的運行時會從Goroutine池

中選擇一個,但如果找不到任何可用的Goroutine,它會創(chuàng)建一個新的。然后,這個新的Goroutine加入到一個P的可運行隊列中。

2.P(邏輯處理器)

在Go調度器中,當我們提到“處理器”時,我們指的是邏輯實體,而不是物理實體。

默認情況下,P的數(shù)量設置為可用的核心數(shù),你可以使用runtime.GOMAXPROCS(int)函數(shù)來檢查或更改這些處理器的數(shù)量。

runtime.GOMAXPROCS(0) // 獲取當前允許的邏輯處理器數(shù)量

如果你想更改這個數(shù)量,最好是在應用程序啟動時更改它,如果在運行時更改,它會導致STW(停止一切),直到重新調整處理器。

每個P都擁有自己的可運行Goroutines列表,稱為本地運行隊列,最多可以容納256個Goroutines。

1*0EneA397HA1uYYeg0_HspQ.png

調度器 — P(邏輯處理器)

如果P的隊列達到了最大Coroutines數(shù)(256),那么就有一個共享隊列,稱為全局運行隊列,但我們將稍后討論這個。

"那么 'P' 的這個數(shù)量到底代表什么?" 它表示可以同時運行的Goroutines數(shù)量 — 想象它們并行運行。

3.M(機器線程 — 操作系統(tǒng)線程)

一個典型的Go程序最多可以使用1萬個線程。

是的,我說的是線程,而不是Goroutines。如果超出這個限制,你可能會使你的Go應用程序崩潰。

"什么情況下會創(chuàng)建一個線程?" 想象一種情況:一個Goroutine處于可運行狀態(tài)并需要一個線程。如果所有線程已經(jīng)被阻塞,可能是因為系統(tǒng)調用或非搶占操作,會怎么樣?在這種情況下,調度器會介入并為該Goroutine創(chuàng)建一個新線程。一個需要注意的事情是,如果一個線程只是忙于昂貴的計算或長時間運行的任務,它不被視為被卡住或被阻塞。如果你想更改默認線程限制,你可以使用 runtime/debug.SetMaxThreads() 函數(shù),它允許你設置你的Go程序可以使用的操作系統(tǒng)線程的最大數(shù)量。此外,值得知道的是,線程是可以重復使用的,因為創(chuàng)建或銷毀線程是消耗資源的。

三、MPG 工作原理

讓我們通過項目符號逐步了解 M、P 和 G 如何一起運作。

我不會在這里深入討論每個細節(jié),但我將在即將發(fā)布的故事中深入探討。如果你感興趣,請訂閱。

1*d4hu416FJtHHaJaKJFYkGg.png

1.Go Scheduler 的工作原理:

  • 初始化 goroutine:通過使用 go func() 命令,Go Runtime 要么創(chuàng)建一個新的 goroutine,要么從池中選擇一個現(xiàn)有的。
  • 排隊位置:goroutine 尋找其在隊列中的位置,如果所有邏輯處理器(P)的本地隊列都滿了,那么這個 goroutine 就被放入全局隊列。
  • 線程配對:這是 M 開始發(fā)揮作用的地方。它獲取一個 P 并開始處理來自 P 本地隊列的 goroutine,當 M 與這個 goroutine 交互時,與之關聯(lián)的 P 就變得占用,不再可用于其他 M。
  • 竊取行為:如果某個 P 的隊列被耗盡,M 會嘗試“借用”另一個 P 隊列中一半可運行的 goroutine。如果不成功,它然后檢查全局隊列,然后再檢查網(wǎng)絡輪詢器(請查看下面的“竊取過程”圖表部分)。
  • 資源分配:M 選擇了一個 goroutine(G)之后,它會獲取運行 G 所需的所有資源。“那么被阻塞的線程呢?” 如果一個 goroutine 啟動了需要時間的系統(tǒng)調用(比如讀取文件),那么 M 會等待。但調度程序不喜歡某個只是坐在那里等待的線程,它會將被暫停的 M 與其 P 解除連接,并將來自隊列的另一個可運行的 goroutine 與新的或現(xiàn)有的 M 連接起來,然后與 P 協(xié)作。

2.被阻塞的線程

竊取過程:

當一個線程(M)完成了它的任務并沒有其他事情可做時,它不會坐在那里。

相反,它積極地尋找更多工作,觀察其他處理器并獲取它們一半的任務,讓我們來詳細了解一下:

ewA.png

  • 每 61 個時鐘滴答,M 檢查全局可運行隊列,以確保執(zhí)行的公平性。如果在全局隊列中找到一個可運行的 goroutine,就停止。
  • 然后,線程 M 檢查其本地運行隊列,與其處理器 P 相關聯(lián),以查看是否有可運行的 goroutine 可以處理。
  • 如果線程發(fā)現(xiàn)它的隊列是空的,那么它會查看全局隊列,看看那里是否有等待處理的任務。
  • 然后,線程會檢查網(wǎng)絡輪詢器,以查看是否有與網(wǎng)絡相關的任務。
  • 如果線程在檢查了網(wǎng)絡輪詢器后仍然沒有找到任務,它將進入主動搜索模式,我們可以將其視為旋轉狀態(tài)。
  • 在這種狀態(tài)下,線程試圖從其他處理器的隊列中“借用”任務。
  • 經(jīng)過所有這些步驟后,如果線程仍然找不到工作,它將停止主動搜索。
  • 現(xiàn)在,如果有新的任務進來,而且有一個沒有在搜索狀態(tài)的空閑處理器,那么可以提示另一個線程開始工作。

需要注意的細節(jié)是全局隊列實際上被檢查了兩次:每 61 個時鐘滴答一次以確保公平性,如果本地隊列為空,就再次檢查。

“如果 M 與其 P 相關聯(lián),它怎么能從其他處理器那里獲取任務呢?M 會更改其 P 嗎?” 答案是不會。即使 M 從另一個 P 的隊列中獲取任務,它仍然使用其原始處理器來運行該任務。因此,在 M 承擔新任務的同時,它仍然忠實于其處理器。

“為什么是 61?” 在設計算法時,特別是哈希算法,通常會選擇質數(shù),因為它們除了 1 和它們自己之外沒有除數(shù)。這可以降低出現(xiàn)模式或規(guī)律的機會,從而防止“碰撞”或其他不希望出現(xiàn)的行為。如果太短,系統(tǒng)可能會浪費資源頻繁檢查全局運行隊列。如果太長,goroutine 可能會在執(zhí)行之前等待過長的時間。

3.網(wǎng)絡輪詢器

我們還沒有詳細討論網(wǎng)絡輪詢器,但它在竊取過程圖表中提到了。

與 Go Scheduler 一樣,網(wǎng)絡輪詢器是 Go Runtime 的組成部分,負責處理與網(wǎng)絡相關的調用(例如,網(wǎng)絡 I/O)。

讓我們比較兩種系統(tǒng)調用類型:

  • 與網(wǎng)絡相關的系統(tǒng)調用:當一個 goroutine 執(zhí)行網(wǎng)絡 I/O 操作時,它不會阻塞線程,而是會在網(wǎng)絡輪詢器中注冊。輪詢器會異步等待操作完成,一旦完成,goroutine 就會再次可運行,可以在一個線程上繼續(xù)執(zhí)行。
  • 其他系統(tǒng)調用:如果它們可能會阻塞并且不由網(wǎng)絡輪詢器處理,它們可能會導致 goroutine 將其執(zhí)行卸載到操作系統(tǒng)線程上。只有特定的操作系統(tǒng)線程會被阻塞,Go 運行時調度程序可以在不同線程上執(zhí)行其他 goroutine。
責任編輯:趙寧寧 來源: 小技術君
相關推薦

2025-01-15 09:13:53

2010-04-23 09:30:18

國產(chǎn)龍芯服務器

2022-02-15 18:45:35

Linux進程調度器

2024-10-29 08:52:01

Go協(xié)作式調度

2023-11-22 13:18:02

Linux調度

2023-03-03 15:37:32

GMP 模型goroutine

2021-03-12 08:53:09

GC調度Goroutine

2023-12-13 13:03:53

任務調度執(zhí)行XXLJOB

2025-07-04 08:43:51

2011-01-21 07:36:00

LinuxBFSCFS

2018-03-14 09:44:56

阿里容器平臺

2011-01-13 13:59:14

2023-04-17 08:13:13

KubernetesPod

2021-01-29 08:22:03

調度器Yarn架構

2022-02-18 15:07:29

goroutinepanic協(xié)程

2013-03-08 10:07:20

GO語言Goroutine

2022-07-12 10:38:25

分布式框架

2019-01-10 11:12:15

Nginx服務器架構

2010-06-04 09:42:23

MySQL 事件調度器

2021-08-10 07:41:24

ContextWaitGroupGoroutine
點贊
收藏

51CTO技術棧公眾號

免费在线午夜视频| 69视频免费看| 欧美美女在线直播| 欧美日韩一区免费| 日韩中文字幕av在线| 97精品人妻一区二区三区在线| 亚洲一级毛片| 国产偷国产偷亚洲清高网站| 狠狠干狠狠操视频| 蜜桃视频m3u8在线观看| 国产精品视频免费| 国产精品久久精品视| 国产精品久久久久久久久久久久久久久久久 | 亚洲AV无码国产精品午夜字幕 | 中文字幕国产传媒| 啦啦啦中文在线观看日本| 久久伊人蜜桃av一区二区| 91精品久久久久久久久久久久久久| 国产性生活网站| av一区二区在线播放| 精品国产伦理网| 午夜激情av在线| 激情国产在线| 亚洲一区二区三区四区在线免费观看| 日本一区二区三区免费看| 亚洲精品无码久久久| 免费高清成人在线| 91精品国产91久久久久久不卡| 希岛爱理中文字幕| 你懂的一区二区三区| 精品日韩在线观看| 三级黄色片免费看| 欧美激情不卡| 欧美性大战久久久久久久蜜臀| 美女扒开大腿让男人桶| www.久久ai| 中文字幕中文字幕一区二区 | www.色.com| 久久爱.com| 午夜精品123| 欧美性猛交内射兽交老熟妇| 欧美性天天影视| 欧美激情中文字幕一区二区| 欧美日韩高清免费| 日韩av高清在线| jiyouzz国产精品久久| 91九色露脸| www.日韩高清| 国产精品白丝jk黑袜喷水| 国产在线日韩在线| 一级黄色大片网站| 毛片av中文字幕一区二区| 国产精品第10页| 欧美一区二区三区网站| 亚洲欧美日本国产专区一区| 欧美亚洲国产成人精品| 国产精品黄色大片| 亚洲综合日本| 国产成人精品在线视频| jizz国产在线观看| 日韩精品91亚洲二区在线观看| 国产精品第一视频| 中文字幕一级片| 美日韩一级片在线观看| 成人日韩av在线| 国产成人免费看一级大黄| 国产美女av一区二区三区| 91久久嫩草影院一区二区| 国产精品欧美亚洲| 高清在线观看日韩| 国产在线精品一区二区三区| 五月婷婷六月丁香| 国产日韩综合av| 亚洲巨乳在线观看| 超碰在线网址| 午夜成人免费电影| 人妻内射一区二区在线视频| 久久亚洲精品人成综合网| 7777精品伊人久久久大香线蕉| 亚洲精品一二三四| 国产一区二区三区亚洲| 日韩精品免费看| 一级黄色片网址| 亚洲第一偷拍| 91国自产精品中文字幕亚洲| 亚洲第一网站在线观看| 精品在线观看免费| 国产精品一区二区欧美黑人喷潮水| 日本精品久久久久| 日本一区二区免费在线观看视频| 一区二区三区偷拍| 国产无遮挡裸体视频在线观看| 欧洲色大大久久| 日韩欧美中文视频| 日韩激情啪啪| 久久亚洲影音av资源网 | 国产欧美在线| 国产日韩专区在线| 天天综合网在线| 国产精品美女www爽爽爽| 国产91porn| 中文字幕乱码在线播放| 在线电影国产精品| 熟女人妻在线视频| 国产精品99久久精品| 久久久视频在线| 老熟妇一区二区三区啪啪| 国产激情91久久精品导航| 欧美在线一二三区| 啪啪免费视频一区| 精品视频免费在线| 亚洲自拍偷拍一区二区| 欧美激情五月| 国产成人鲁鲁免费视频a| 亚洲av无码国产精品永久一区 | 欧美色图亚洲自拍| 欧美人与牲禽动交com| 欧美午夜宅男影院| 国产美女喷水视频| 在线日韩欧美| 91精品视频免费观看| 韩国精品视频| 红桃av永久久久| 免费观看污网站| 午夜国产一区二区| 国产精品jizz在线观看麻豆| 免费看日韩av| 伊人一区二区三区| www.国产福利| 日韩精品诱惑一区?区三区| 欧美一级大片视频| 免费看日韩av| 一级日本不卡的影视| 日韩va在线观看| 日韩在线二区| 国产日本欧美在线观看| 黄色视屏网站在线免费观看| 欧美性猛交xxxx| 男人的天堂影院| 最新亚洲视频| 国产精品日韩一区二区| 欧美大胆的人体xxxx| 欧美二区乱c少妇| 日韩精品久久久久久久的张开腿让| 久久在线精品| 日韩高清av| 日韩一区二区三区在线免费观看 | av网站大全在线观看| 色偷偷成人一区二区三区91| 97人妻精品一区二区三区免| 亚洲精品免费观看| 国外成人在线视频网站| h片在线观看视频免费| 91精品国产色综合久久不卡蜜臀| 国产人与禽zoz0性伦| 另类欧美日韩国产在线| 一区二区三区在线观看www| 欧美高清影院| 欧美精品免费播放| 亚洲第一第二区| 午夜电影一区二区| www在线观看免费视频| 久久综合导航| 亚洲欧美久久234| 欧美伊人亚洲伊人色综合动图| xx视频.9999.com| 亚洲av无码一区二区三区性色 | 99re免费视频精品全部| 草草久久久无码国产专区| 亚洲精品456| 国产精品视频成人| 中文字幕有码在线视频| 亚洲国产精品嫩草影院久久| 日本天堂网在线| 欧美激情在线一区二区三区| 中文字幕精品一区二区三区在线| 欧美精品不卡| 激情小说综合区| 国产成人免费9x9x人网站视频| 日韩专区在线播放| www国产一区| 色屁屁一区二区| 中文乱码字幕高清一区二区| 成人少妇影院yyyy| 日韩a在线播放| 99精品视频在线观看免费播放| 91原创国产| 超级碰碰久久| 精品国产一区久久久| 黑人精品一区二区三区| 91国内精品野花午夜精品| www.xxxx日本| 91首页免费视频| 亚洲自拍第三页| 亚洲免费网址| 9191国产视频| 国产欧美久久一区二区三区| 亚洲自拍高清视频网站| 最新欧美色图| 久久福利视频导航| 天堂av在线7| 制服丝袜一区二区三区| 国产尤物在线视频| 亚洲九九爱视频| 韩国女同性做爰三级| 国产成人在线视频网站| 538在线视频观看| 亚洲福利一区| 亚洲一区尤物| 亚洲精华一区二区三区| 草莓视频一区| 欧洲午夜精品| 国产不卡视频在线| 白浆视频在线观看| 久久影院在线观看| av在线免费观看网站| 亚洲精品久久在线| www.桃色av嫩草.com| 欧美日韩国产大片| 免费又黄又爽又猛大片午夜| 五月天激情小说综合| 真实国产乱子伦对白在线| 亚洲国产成人私人影院tom| 青青草成人免费视频| 成人综合婷婷国产精品久久免费| 激情文学亚洲色图| 麻豆精品一区二区综合av| 日韩精品免费播放| 香蕉国产精品偷在线观看不卡| 真实国产乱子伦对白视频| 性欧美欧美巨大69| 亚洲图色在线| 久久国产成人精品| 天堂av一区二区| 国产欧美高清视频在线| 欧美精品一区二区三区在线看午夜| 99re热精品视频| yellow视频在线观看一区二区 | 久久精品第九区免费观看| 日本精品视频| 亚洲影院高清在线| 亚洲精品aaa| 成人疯狂猛交xxx| www.欧美视频| 91久久精品视频| 精品午夜视频| 亚洲综合中文字幕在线| 欧美一级片网址| 91青青草免费在线看| 亚洲亚洲一区二区三区| 97se亚洲综合在线| 一区二区亚洲视频| 国产精品免费看一区二区三区| 精品国模一区二区三区欧美| 97视频资源在线观看| 国产一区二区三区不卡av| 精品乱色一区二区中文字幕| 琪琪久久久久日韩精品| 欧美婷婷久久| 秋霞欧美视频| 日本福利视频导航| 欧美成人国产| 日韩av一二三四区| 久久亚洲一区| www.这里只有精品| 国产高清在线精品| 欧美xxxxx精品| 久久九九久久九九| 日日碰狠狠添天天爽| 一区二区高清视频在线观看| 青青草av在线播放| 欧美最新大片在线看| 国产精品久久久久精| 欧美成人精品福利| 五月激情婷婷网| 在线观看欧美日韩国产| 成人黄色网址| 777777777亚洲妇女| 日本.亚洲电影| 91在线精品播放| 久久综合另类图片小说| 日韩精品资源| 国产精品av久久久久久麻豆网| 精品少妇人妻av免费久久洗澡| 视频一区视频二区在线观看| 在线a免费观看| 91在线观看地址| 日本伦理一区二区三区| 亚洲福中文字幕伊人影院| 欧美一级做a爰片免费视频| 欧美一级片在线观看| 欧美精品少妇| 欧美寡妇偷汉性猛交| 三上悠亚国产精品一区二区三区| 95av在线视频| 狠狠色丁香婷婷综合影院| 97超碰在线视| 日本中文字幕一区二区视频| 日批免费观看视频| 亚洲国产经典视频| 日韩污视频在线观看| 欧美精品高清视频| 免费在线一级视频| 色综合久久88色综合天天看泰| 另类专区亚洲| 国产精品久久精品国产| 91精品国产福利在线观看麻豆| 免费无码国产v片在线观看| 国产精品综合av一区二区国产馆| 西西444www无码大胆| 亚洲香肠在线观看| 91国内精品视频| 亚洲丝袜av一区| www.综合网.com| 91视频88av| 成人嫩草影院| 欧美 日韩精品| 99久久久国产精品免费蜜臀| 91嫩草|国产丨精品入口| 在线日韩国产精品| 瑟瑟在线观看| 97精品在线视频| 亚洲va欧美va人人爽成人影院| 亚洲精品美女久久7777777| 老司机一区二区三区| 成人在线电影网站| 亚洲一区二区高清| 精品久久久无码中文字幕| 久久久精品一区| 亚洲国产综合在线观看| 天堂社区 天堂综合网 天堂资源最新版 | 亚洲男子天堂网| 51漫画成人app入口| 动漫3d精品一区二区三区 | 国产精品第四页| 最近国语视频在线观看免费播放| 亚洲毛片在线观看.| 麻豆视频在线观看免费网站黄| 国产免费一区二区三区| 精品成人在线| 日本一卡二卡在线| 午夜精品久久久久久久蜜桃app| 欧美少妇bbw| 97视频网站入口| 亚洲三级精品| 日韩精品一区二区三区不卡 | 日韩国产高清在线| 在线不卡av电影| 欧美午夜精品一区二区蜜桃| а√天堂中文在线资源bt在线| 国产精品久久久久久超碰| 欧美理论视频| 亚洲综合av在线播放| 中文字幕一区av| 国产av无码专区亚洲av| 欧美高清视频在线| 国内毛片久久| 丝袜老师办公室里做好紧好爽| 久久综合九色综合欧美98 | 日韩精品一区二区三区在线播放| 中文在线免费| 精品国产一二| 老牛国产精品一区的观看方式| www.日本高清视频| 91精品国产色综合久久不卡蜜臀| 欧美性video| 久久久久久久久久码影片| 日日摸夜夜添夜夜添精品视频 | 男人天堂网在线观看| 国产精品网址在线| 欧美体内she精视频在线观看| 日本五十肥熟交尾| 色丁香久综合在线久综合在线观看| av福利精品| 97中文在线观看| 国产欧美69| 中文字幕第69页| 日韩你懂的在线播放| 日本在线啊啊| 在线不卡视频一区二区| 成人免费毛片app| 成年人视频免费| 欧美另类在线播放| 免费久久精品| 被黑人猛躁10次高潮视频| 欧美日韩亚洲国产一区| 欧美激情午夜| 好吊色欧美一区二区三区四区 | 中国免费黄色片| 色8久久人人97超碰香蕉987| а√天堂官网中文在线| 久草精品电影| 国产乱对白刺激视频不卡| 黄色片免费观看视频| www.亚洲免费视频| 婷婷成人在线| 日本精品一二三| 欧美日韩国产影片| 乱馆动漫1~6集在线观看| 黄色www在线观看|