<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
我們都知道,在Go語言中,程式執行的最小單元是gorouines。
然而程式的執行最終都是要交給作業系統來執行的,以Java為例,Java中的一個執行緒對應的就是作業系統中的執行緒,以此來實現在作業系統中的執行。在Go中,gorouines比執行緒更輕量級,其與作業系統的執行緒也不是一一對應的關係,然而,最終我們想要執行程式,還是要藉助作業系統的執行緒來完成,排程器scheduler的工作就是完成gorouines到作業系統執行緒的排程。
當我們執行go fun(){}
時,會生成一個g,優先放置在建立他的p的本地佇列中,如果本地佇列已滿,那麼會放置在全域性佇列中。
g的執行需要藉助p與m,p是執行器,只有獲得p的g才能執行,p的執行需要掛在m上,m對應的是作業系統中的執行緒,p的數量與CPU的核數相同。
goroutine執行所需要的上下文資訊都是存放在g的資料結構當中的,所以g可以依靠任意的p或者m執行,而對於作業系統而言,其並不能看到p與g的排程過程,這些過程對於作業系統執行緒來說都是連續的,所以省去了執行緒上下文切換的開銷。
g的資料結構如下所示:
type g struct { stack stack // g自己的棧 m *m // 執行當前g的m sched gobuf // 儲存了g的現場,goroutine切換時通過它來恢復 atomicstatus uint32 // g的狀態Gidle,Grunnable,Grunning,Gsyscall,Gwaiting,Gdead goid int64 schedlink guintptr // 下一個g, g連結串列 preempt bool //搶佔標記 lockedm muintptr // 鎖定的M,g中斷恢復指定M執行 gopc uintptr // 建立該goroutine的指令地址 startpc uintptr // goroutine 函數的指令地址 }
p的資料結構如下所示:
type p struct { id int32 status uint32 // 狀態 link puintptr // 下一個P, P連結串列 m muintptr // 擁有這個P的M mcache *mcache // P本地runnable狀態的G佇列 runqhead uint32 runqtail uint32 runq [256]guintptr runnext guintptr // 一個比runq優先順序更高的runnable G // 狀態為dead的G連結串列,在獲取G時會從這裡面獲取 gFree struct { gList n int32 } gcBgMarkWorker guintptr // (atomic) gcw gcWork }
m的資料結構如下所示:
type m struct { g0 *g // g0, 每個M都有自己獨有的g0 curg *g // 當前正在執行的g p puintptr // 當前用於的p nextp puintptr // 當m被喚醒時,首先擁有這個p id int64 spinning bool // 是否處於自旋 park note alllink *m // on allm schedlink muintptr // 下一個m, m連結串列 mcache *mcache // 記憶體分配 lockedg guintptr // 和 G 的lockedm對應 freelink *m // on sched.freem }
通過gmp模型,我們能解決gorouines到作業系統執行緒的對映問題,gorouines之間的切換是在使用者態完成的,在作業系統的視角來看,執行緒的上下文切換並不頻繁,因此就少了很多陷入核心的過程,所以有更好的並行效果。
1)work stealing機制
當一個p上的g執行完之後,他會嘗試從其他的p佇列中竊取g來執行,以減少作業系統執行緒的切換動作。
2)hand off機制
這個是針對m來說的,有的時候m可能因為g的訊號呼叫而被作業系統阻塞,這個時候p就會掛載去另一個m繼續執行可以執行的g,當阻塞的m就緒之後,會給p發訊號,召喚他回來繼續進行後續操作。
到此這篇關於一文詳解Golang協程排程器scheduler的文章就介紹到這了,更多相關Golang scheduler內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45