專題簡介
本專題以精心設計的情景為線索,結合go語言最新1.12版源代碼深入細致的分析了goroutine調度器實現原理。
適宜讀者
- go語言開發人員
- 對線程調度器工作原理感興趣的工程師
- 對計算機底層運行原理感興趣的工程師
專題目標
筆者希望即使是從未接觸過計算機底層原理的讀者,通過對本專欄的認真學習,都可以完全掌握go語言調度器的實現原理及細節,從而可以充分利用go調度器的特性寫出更加優秀的並發程序和解決一些與調度相關的疑難雜症;另外,讀者還可以學到大量與程序運行相關的基礎知識,比如匯編代碼,CPU如何執行指令以及並發無鎖編程等等非常重要的編程內功心法,有了這些基礎理論,在今后的學習和工作中,讀者就完全有能力對其它一些自己感興趣的底層實現原理做深入的分析。
如何學習本專欄
編程是一門實踐性很強的技術,所以建議讀者在閱讀本專欄時多注重實踐練習,特別是在學習第一部分的匯編指令及函數調用棧等知識的時候,讀者可以自己寫一些小程序然后用調試工具單步執行來跟蹤寄存器以及棧的變化,從而更好的理解這些內容。
專欄模塊
本專欄主要分為兩大部分:
- 第一部分包括第一章,主要介紹理解調度器工作原理所必須的預備知識,比如匯編指令,函數調用過程,操作系統線程調度原理以及線程本地存儲等重要理論知識。這部分內容主要是為從未接觸過底層知識的讀者准備的,如果讀者對這部分已經很熟了,則完全可以跳過這部分的閱讀。
- 第二部分包括第2到第6章,主要分析goroutine調度器的實現,包括調度器的初始化,調度策略以及主動被動和搶占調度等,在分析過程中我們不僅會介紹調度器在干什么,更重要的是我們還會詳細說明為什么要這么做,讓讀者知其然也知其所以然。
專欄章節(初稿已經全部完成,逐漸放上來)
開篇語
第一章 預備知識
1. CPU寄存器
2. 內存
3. 函數調用棧
4. 匯編指令
5. go語言匯編
6. 函數調用過程
7. 系統調用
8. 操作系統線程及調度
9. 線程本地存儲
第二章 初始化和調度循環
1. 調度器概述
2. 程序啟動和調度器初始化
3. 創建main goroutine
4. 啟動main goroutine
第三章 調度策略
1. goroutine的退出與調度循環
2. 再探schedule函數與尋找可運行的goroutine
3. 盜取goroutine與工作線程睡眠
第四章 被動調度
1. goroutine進入運行隊列
2. goroutine進入睡眠
3. 喚醒睡眠中的goroutine與工作線程
4. 創建工作線程
第五章 主動調度
1. 主動調度
第六章 搶占調度
1. 搶占運行時間過長的goroutine
2. goroutine進入系統調用以及從系統調用返回
3. 搶占進入系統調用的goroutine
作者簡介
愛寫程序的阿波張,男,程序員,高級技術專家。
15年軟件開發經驗,做過應用層軟件,也玩過操作系統內核,目前專注於K12在線教育。
對計算機底層運行原理很感興趣,熟悉X86匯編/C/C++/Go。
最后,歡迎關注個人微信公眾號:go語言核心編程技術