



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第一文理解Goland協(xié)程調(diào)度器scheduler的實(shí)現(xiàn)目錄1.調(diào)度器scheduler的作用2.GMP模型3.調(diào)度機(jī)制
1.調(diào)度器scheduler的作用
我們都知道,在Go語言中,程序運(yùn)行的最小單元是gorouines。
然而程序的運(yùn)行最終都是要交給操作系統(tǒng)來執(zhí)行的,以Java為例,Java中的一個線程對應(yīng)的就是操作系統(tǒng)中的線程,以此來實(shí)現(xiàn)在操作系統(tǒng)中的運(yùn)行。在Go中,gorouines比線程更輕量級,其與操作系統(tǒng)的線程也不是一一對應(yīng)的關(guān)系,然而,最終我們想要執(zhí)行程序,還是要借助操作系統(tǒng)的線程來完成,調(diào)度器scheduler的工作就是完成gorouines到操作系統(tǒng)線程的調(diào)度。
2.GMP模型
當(dāng)我們運(yùn)行g(shù)ofun(){}時,會生成一個g,優(yōu)先放置在創(chuàng)建他的p的本地隊(duì)列中,如果本地隊(duì)列已滿,那么會放置在全局隊(duì)列中。
g的運(yùn)行需要借助p與m,p是執(zhí)行器,只有獲得p的g才能執(zhí)行,p的執(zhí)行需要掛在m上,m對應(yīng)的是操作系統(tǒng)中的線程,p的數(shù)量與CPU的核數(shù)相同。
goroutine運(yùn)行所需要的上下文信息都是存放在g的數(shù)據(jù)結(jié)構(gòu)當(dāng)中的,所以g可以依靠任意的p或者m執(zhí)行,而對于操作系統(tǒng)而言,其并不能看到p與g的調(diào)度過程,這些過程對于操作系統(tǒng)線程來說都是連續(xù)的,所以省去了線程上下文切換的開銷。
g的數(shù)據(jù)結(jié)構(gòu)如下所示:
typegstruct{
stackstack//g自己的棧
m*m//執(zhí)行當(dāng)前g的m
schedgobuf//保存了g的現(xiàn)場,goroutine切換時通過它來恢復(fù)
atomicstatusuint32//g的狀態(tài)Gidle,Grunnable,Grunning,Gsyscall,Gwaiting,Gdead
goidint64
schedlinkguintptr//下一個g,g鏈表
preemptbool//搶占標(biāo)記
lockedmmuintptr//鎖定的M,g中斷恢復(fù)指定M執(zhí)行
gopcuintptr//創(chuàng)建該goroutine的指令地址
startpcuintptr//goroutine函數(shù)的指令地址
}
p的數(shù)據(jù)結(jié)構(gòu)如下所示:
typepstruct{
idint32
statusuint32//狀態(tài)
linkpuintptr//下一個P,P鏈表
mmuintptr//擁有這個P的M
mcache*mcache
//P本地runnable狀態(tài)的G隊(duì)列
runqheaduint32
runqtailuint32
runq[256]guintptr
runnextguintptr//一個比runq優(yōu)先級更高的runnableG
//狀態(tài)為dead的G鏈表,在獲取G時會從這里面獲取
gFreestruct{
gList
nint32
gcBgMarkWorkerguintptr//(atomic)
gcwgcWork
}
m的數(shù)據(jù)結(jié)構(gòu)如下所示:
typemstruct{
g0*g//g0,每個M都有自己獨(dú)有的g0
curg*g//當(dāng)前正在運(yùn)行的g
ppuintptr//當(dāng)前用于的p
nextppuintptr//當(dāng)m被喚醒時,首先擁有這個p
idint64
spinningbool//是否處于自旋
parknote
alllink*m//onallm
schedlinkmuintptr//下一個m,m鏈表
mcache*mcache//內(nèi)存分配
lockedgguintptr//和G的lockedm對應(yīng)
freelink*m//onsched.freem
}
通過gmp模型,我們能解決gorouines到操作系統(tǒng)線程的映射問題,gorouines之間的切換是在用戶態(tài)完成的,在操作系統(tǒng)的視角來看,線程的上下文切換并不頻繁,因此就少了很多陷入內(nèi)核的過程,所以有更好的并發(fā)效果。
3.調(diào)度機(jī)制
1)workstealing機(jī)制
當(dāng)一個p上的g執(zhí)行完之后,他會嘗試從其他的p隊(duì)列中竊取g來執(zhí)行,以減少操作系統(tǒng)線程的切換動作。
2)hand
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 消防設(shè)施維保內(nèi)容及實(shí)施方案
- 2025年濕法混合顆粒機(jī)項(xiàng)目發(fā)展計(jì)劃
- 2025年CTD剖面儀項(xiàng)目合作計(jì)劃書
- 2025年紫外固化材料項(xiàng)目合作計(jì)劃書
- 甘肅省天水市五中2025年高二物理第二學(xué)期期末監(jiān)測模擬試題含解析
- 教育科技產(chǎn)品的倫理設(shè)計(jì)及市場策略
- 醫(yī)療健康信息的多樣化傳播途徑
- 智慧教室中在線學(xué)習(xí)平臺的設(shè)計(jì)與實(shí)踐
- 家長參與的社區(qū)教育項(xiàng)目實(shí)踐與思考
- 新媒體技術(shù)在商業(yè)培訓(xùn)中的價值體現(xiàn)
- 肺癌胸腔積液患者護(hù)理
- 老年法律知識講座
- DB43T-用水定額 第1部分:農(nóng)業(yè)
- 社交媒體在職場人際關(guān)系中的作用分析
- 醫(yī)療行業(yè)員工激勵與穩(wěn)定措施
- 《戶外探險(xiǎn)》課件
- 《老年人出院準(zhǔn)備服務(wù)指南》
- 2025年畜禽屠宰及加工企業(yè)組織結(jié)構(gòu)及部門職責(zé)
- 《工藝流程培訓(xùn)》課件
- 頸椎前路手術(shù)麻醉
- 第一單元 第1課《互聯(lián)網(wǎng)發(fā)展靠創(chuàng)新》說課稿2024-2025學(xué)年人教版(2024)初中信息科技七年級上冊
評論
0/150
提交評論