国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Go調(diào)度器: M,P和G

開發(fā)
這是另一篇關(guān)于Go調(diào)度器(scheduler)的文章。 原文: GO SCHEDULER: MS, PS & GS by Uber工程師 Povilas。

這是另一篇關(guān)于Go調(diào)度器(scheduler)的文章。 原文: GO SCHEDULER: MS, PS & GS by Uber工程師 Povilas。

網(wǎng)上已經(jīng)有很多關(guān)于Go調(diào)度器的文章了, 比如 Golang調(diào)度器源碼分析 ,多看一些,可以加深記憶,也可以對比查看文章中是否有不準(zhǔn)確的地方,更全面的了解Go的調(diào)度器。

我決定深入了解Go的內(nèi)部機(jī)制, 因?yàn)楹荛L時(shí)間沒人寫關(guān)于Go scheduler的文章了, 我覺得這是一個(gè)很有趣的知識(shí)點(diǎn),所以讓我們開始吧。

基礎(chǔ)知識(shí)

Go的運(yùn)行時(shí)管理著調(diào)度、垃圾回收以及goroutine的運(yùn)行環(huán)境。本文只關(guān)注于調(diào)度器。

運(yùn)行時(shí)負(fù)責(zé)運(yùn)行g(shù)oroutine并把它們影射到操作系統(tǒng)的線程上。goroutine比線程還輕量, 啟動(dòng)的時(shí)候花費(fèi)很少。每個(gè)goroutine都是由一個(gè) G 結(jié)構(gòu)來表示,

這個(gè)結(jié)構(gòu)體的字段用來跟蹤此goroutine的棧(stack)和狀態(tài),所以你可以認(rèn)為 G = goroutine 。

運(yùn)行時(shí)管理著 G 并把它們映射到 Logical Processor (稱之為 P ). P 可以看作是一個(gè)抽象的資源或者一個(gè)上下文,它需要獲取以便操作系統(tǒng)線程(稱之為 M )可以運(yùn)行 G 。

通過 runtime.GOMAXPROCS (numLogicalProcessors) 可以控制多少 P 可以獲取。如果你需要調(diào)整這個(gè)參數(shù)(大部分情況下你無需調(diào)整), 只設(shè)置一次, 因?yàn)樗枰?STW gc pause。

本質(zhì)上,操作系統(tǒng)運(yùn)行線程,線程運(yùn)行你的代碼。Go的技巧是編譯器會(huì)在Go運(yùn)行時(shí)的一些地方插入系統(tǒng)調(diào)用, (比如通過channel發(fā)送值,調(diào)用runtime包等),所以Go可以通知調(diào)度器執(zhí)行特定的操作。

Go調(diào)度器: M,P和G

上圖的理解來自 Analysis of the Go runtime scheduler

M、P 和 G 之間的交互

M、 P 和 G 之間的交互有點(diǎn)復(fù)雜。看看下面這張來自 Gao Chao的 go runtime scheduler 幻燈片中的一張圖:

Go調(diào)度器: M,P和G

可以看到,Go運(yùn)行時(shí)存在兩種類型的queue: 一種是一個(gè)全局的queue(在 schedt結(jié)構(gòu)體中 ,很少用到), 一種是每個(gè) P 都維護(hù)自己的 G 的queue。

為了運(yùn)行g(shù)oroutine, M 需要持有上下文 P 。 M 會(huì)從 P 的queue彈出一個(gè)goroutine并執(zhí)行。

當(dāng)你創(chuàng)建一個(gè)新的goroutine的時(shí)候( go func() 方法),它會(huì)被放入 P 的queue。當(dāng)然還有一個(gè) work-stealing 調(diào)度算法,當(dāng) M 執(zhí)行了一些 G 后,如果它的queue為空,它會(huì)隨機(jī)的選擇另外一個(gè) P ,從它的queue中取走一半的 G 到自己的queue中執(zhí)行。(偷!)

當(dāng)你的goroutine執(zhí)行阻塞的系統(tǒng)調(diào)用的時(shí)候(syscall),阻塞的系統(tǒng)調(diào)用會(huì)中斷(intercepted),如果當(dāng)前有一些 G 在執(zhí)行,運(yùn)行時(shí)會(huì)把這個(gè)線程從 P 中摘除(detach),然后再創(chuàng)建一個(gè)新的操作系統(tǒng)的線程(如果沒有空閑的線程可用的話)來服務(wù)于這個(gè) P 。

當(dāng)系統(tǒng)調(diào)用繼續(xù)的時(shí)候,這個(gè)goroutine被放入到本地運(yùn)行queue,線程會(huì) park 它自己(休眠), 加入到空閑線程中。

如果一個(gè)goroutine執(zhí)行網(wǎng)絡(luò)調(diào)用,運(yùn)行時(shí)會(huì)做類似的動(dòng)作。調(diào)用會(huì)被中斷,但是由于Go使用集成的network poller,它有自己的線程,所以還給它。

Go運(yùn)行時(shí)會(huì)在下面的goroutine被阻塞的情況下運(yùn)行另外一個(gè)goroutine:

  • blocking syscall (for example opening a file),
  • network input,
  • channel operations,
  • primitives in the sync package.

調(diào)度器跟蹤調(diào)試

Go可以跟蹤運(yùn)行時(shí)的調(diào)度器,這是通過 GODEBUG 環(huán)境變量實(shí)現(xiàn)的:

  1. $ GODEBUG=scheddetail=1,schedtrace=1000 ./program 

下面是輸出的例子:

 

  1. SCHED 0ms: gomaxprocs=8 idleprocs=7 threads=2 spinningthreads=0 idlethreads=0 runqueue=0 gcwaiting=0 nmidlelocked=0 stopwait=0 sysmonwait=0 
  2.   P0: status=1 schedtick=0 syscalltick=0 m=0 runqsize=0 gfreecnt=0 
  3.   P1: status=0 schedtick=0 syscalltick=0 m=-1 runqsize=0 gfreecnt=0 
  4.   P2: status=0 schedtick=0 syscalltick=0 m=-1 runqsize=0 gfreecnt=0 
  5.   P3: status=0 schedtick=0 syscalltick=0 m=-1 runqsize=0 gfreecnt=0 
  6.   P4: status=0 schedtick=0 syscalltick=0 m=-1 runqsize=0 gfreecnt=0 
  7.   P5: status=0 schedtick=0 syscalltick=0 m=-1 runqsize=0 gfreecnt=0 
  8.   P6: status=0 schedtick=0 syscalltick=0 m=-1 runqsize=0 gfreecnt=0 
  9.   P7: status=0 schedtick=0 syscalltick=0 m=-1 runqsize=0 gfreecnt=0 
  10.   M1: p=-1 curg=-1 mallocing=0 throwing=0 preemptoff= locks=1 dying=0 helpgc=0 spinning=false blocked=false lockedg=-1 
  11.   M0: p=0 curg=1 mallocing=0 throwing=0 preemptoff= locks=1 dying=0 helpgc=0 spinning=false blocked=false lockedg=1 
  12.   G1: status=8() m=0 lockedm=0 

注意輸出使用了 G 、 M 和 P 的概念以及她們的狀態(tài), 比如 P 的queue的大小。 如果你不想關(guān)心這些細(xì)節(jié),你可以使用:

  1. $ GODEBUG=schedtrace=1000 ./program 

William Kennedy寫了一篇很好的 文章 , 解釋了這些細(xì)節(jié)。

當(dāng)然,還有一個(gè)go自己的工具 go tool trace , 它有一個(gè)UI, 允許你查看你的程序和運(yùn)行時(shí)的狀況。你可以閱讀這篇文章: Pusher 。

責(zé)任編輯:未麗燕 來源: colobu bolg
相關(guān)推薦

2023-12-18 09:31:35

Go容器Linux

2023-10-25 12:51:28

Go調(diào)度器

2021-04-13 08:56:13

Go啟動(dòng)流程

2025-01-15 09:13:53

2009-06-09 10:34:41

802.16mLTE4G

2025-07-03 00:28:41

2024-12-03 15:15:22

2021-10-26 07:42:49

Go線程數(shù)GMP

2020-10-13 09:23:57

LinuxKernel調(diào)度器

2011-01-21 07:36:00

LinuxBFSCFS

2025-07-04 08:43:51

2023-11-07 07:56:40

2021-08-22 17:18:58

Go代碼泛型代碼

2010-09-01 15:10:46

無線局域網(wǎng)Super G

2020-10-12 08:32:34

瀏覽器進(jìn)程線程

2011-01-13 13:59:14

2023-11-20 22:55:00

Goroutine調(diào)度器

2021-01-29 08:22:03

調(diào)度器Yarn架構(gòu)

2023-04-17 08:13:13

KubernetesPod

2011-09-05 13:27:00

P2PTP-LINK路由器限
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲伊人成综合成人网| 日韩一区二区免费电影| 成人黄色影片在线| 日韩经典一区| 亚洲免费观看高清完整版在线观看熊| 俄罗斯精品一区二区| 人人妻人人澡人人爽欧美一区双| 成人3d精品动漫精品一二三| 一区二区成人精品| 草莓福利社区在线| 一区二区高清视频在线观看| 欧美极品少妇无套实战| 欧美在线高清| 日本伊人精品一区二区三区介绍| 久久久99免费| 欧美高清视频不卡网| 亚洲免费看av| 久久日韩粉嫩一区二区三区| 国产综合动作在线观看| 国产亚洲一区| 欧美激情小视频| 国产精品久久免费视频| 亚洲免费一级电影| 国产三区在线观看| 欧美午夜一区二区三区免费大片| 传媒av在线| 欧美特级www| 国产日韩在线看| 成人av影视| 国产日韩在线不卡| 久久久亚洲国产天美传媒修理工| 中文字幕av一区二区三区佐山爱| 亚洲二区中文字幕| 日韩成人动漫| 欧美放荡办公室videos4k| 波多野结衣一区二区三区免费视频| 韩国视频理论视频久久| 国产成人一区二区三区影院| 国产日韩精品一区二区| 91tv官网精品成人亚洲| 成人免费看片网址| 国产麻豆精品theporn| 欧美在线观看视频网站| 欧美日韩国产精品一区| 女人一区二区三区| 精品一区二区三区免费播放| 蜜臀av午夜一区二区三区| 中文字幕日本乱码精品影院| 欧美色综合一区二区三区| 99亚洲一区二区| 人妻熟妇乱又伦精品视频| 亚洲一区二区三区在线| 欧美xxxxhdvideosex| xfplay精品久久| 亚洲美女在线免费观看| 日韩精品一区二区三区蜜臀| 95精品视频| 欧美日韩国产综合视频在线| 国产日本亚洲高清| 毛片网站在线看| 国产成人在线播放| 精品亚洲免费视频| 天堂在线中文资源| 久久高清视频免费| 日韩在线播放一区二区| 羞羞的视频免费| 亚洲男人天堂视频| 亚洲三级毛片| 视频在线91| 在线观看欧美日韩| 日韩亚洲在线| 亚洲国产资源| 欧美一级电影久久| 成人黄色国产精品网站大全在线免费观看| 一级毛片视频在线观看| 国产精品嫩草视频| 国产亚洲成年网址在线观看| yy6080久久伦理一区二区| 亚洲欧美日韩国产成人综合一二三区 | 成人嫩草影院免费观看| 久久精品中文字幕免费mv| 成人av片在线观看| 欧美人与性动交xxⅹxx| 三级在线免费观看| 久久成人av少妇免费| 尤物视频在线观看| 国产精品日韩欧美一区二区三区 | 青青在线免费观看视频| 久久亚洲精品一区| 亚洲麻豆国产自偷在线| 人狥杂交一区欧美二区| 日韩大片免费观看视频播放| 99r精品视频| 午夜在线视频观看日韩17c| 中文字幕中文字幕精品| segui88久久综合9999| 亚洲有码转帖| 国产小视频在线播放| 日日噜噜噜夜夜爽爽狠狠| 69sex久久精品国产麻豆| 日本在线视频不卡| 国产精品9999久久久久仙踪林 | 成人精品gif动图一区| 日韩精品亚洲专区| 亚洲一区不卡| 肉肉av福利一精品导航| 欧美日韩黄网站| 麻豆精品蜜桃| 欧美高清你懂的| 日本午夜免费一区二区| a毛片在线观看| 免费黄色电影在线观看| 全色精品综合影院| 岛国在线大片| 成人综合影院| 最新av在线播放| heyzo高清中文字幕在线| 成人高清免费观看mv| 国产视频二区在线观看| 国产永久av在线| 免费在线看黄网站| 大菠萝精品导航| 久久影院一区二区三区| 97超超碰碰| 欧美成人性福生活免费看| 亚洲一二三区在线观看| 最新欧美精品一区二区三区| 26uuu色噜噜精品一区| 26uuu另类欧美| 精品一区二区三区免费| 欧美99在线视频观看| 人人精品视频| 人体久久天天| 天天躁日日躁狠狠躁欧美| 风间由美性色一区二区三区四区| 亚洲男人在线| 免费一级欧美在线大片| 电影一区二区三区久久免费观看| 78精品国产综合久久香蕉| 四虎国产精品成人免费影视| 粉嫩av国产一区二区三区| aaa国产精品| 久久五月天小说| 亚洲精一区二区三区| 日本在线不卡一区| 成人午夜免费电影| 亚洲国产精品ⅴa在线观看| 亚洲精品国产精品乱码不99| 亚洲va中文字幕| 日韩精品在线看片z| 日韩中文字幕欧美| 性欧美亚洲xxxx乳在线观看| 国产精品稀缺呦系列在线 | 久久久久久黄| 91香蕉视频污| 亚洲国产精品一区二区久久恐怖片| 色综合天天综合网国产成人综合天| 欧美群妇大交群的观看方式| 日韩激情在线视频| 海角国产乱辈乱精品视频| 国产精品视频xxxx| 一区二区在线观看网站| 手机看片一级片| 看女生喷水的网站在线观看| 欧美国产日韩电影| 色综合久久一区二区三区| 久久一区中文字幕| 国产精品美女视频| 制服.丝袜.亚洲.另类.中文 | 操欧美女人视频| 久久久久国产精品一区三寸| 成人欧美一区二区三区小说| 日韩欧美国产一区二区在线播放| 美女福利视频一区| 欧美极品视频一区二区三区| 综合网插菊花| 国产精品久久久久久久久免费高清| 99热这里只有成人精品国产| 亚洲欧洲综合另类| 一区二区三区四区在线观看视频| 97在线中文字幕| 欧美色老女人| 久久免费福利| 大陆成人av片| 亚洲老头老太hd| 精品亚洲欧美日韩| 内衣办公室在线| 神马影视一区二区| 国产精品毛片久久久久久| 久久伊人91精品综合网站| 成熟丰满熟妇高潮xxxxx视频| 成人欧美大片| 在线播放日本| 亚洲第一黄网| 欧美日韩国产中文| 国产女主播一区二区| 国产系列在线观看| 日韩视频在线一区二区三区| 欧美性猛交xxxx乱大交退制版| 精品国产第一页|