go語言調度器源代碼情景分析之一:開篇語

專題簡介程序員

本專題以精心設計的情景爲線索,結合go語言最新1.12版源代碼深刻細緻的分析了goroutine調度器實現原理。編程

 

適宜讀者小程序

  • go語言開發人員
  • 對線程調度器工做原理感興趣的工程師
  • 對計算機底層運行原理感興趣的工程師

 

專題目標微信

筆者但願即便是從未接觸過計算機底層原理的讀者,經過對本專欄的認真學習,均可以徹底掌握go語言調度器的實現原理及細節,從而能夠充分利用go調度器的特性寫出更加優秀的併發程序和解決一些與調度相關的疑難雜症;另外,讀者還能夠學到大量與程序運行相關的基礎知識,好比彙編代碼,CPU如何執行指令以及併發無鎖編程等等很是重要的編程內功心法,有了這些基礎理論,在從此的學習和工做中,讀者就徹底有能力對其它一些本身感興趣的底層實現原理作深刻的分析。併發

 

如何學習本專欄函數

編程是一門實踐性很強的技術,因此建議讀者在閱讀本專欄時多注重實踐練習,特別是在學習第一部分的彙編指令及函數調用棧等知識的時候,讀者能夠本身寫一些小程序而後用調試工具單步執行來跟蹤寄存器以及棧的變化,從而更好的理解這些內容。工具

 

專欄模塊學習

本專欄主要分爲兩大部分:spa

  • 第一部分包括第一章,主要介紹理解調度器工做原理所必須的預備知識,好比彙編指令,函數調用過程,操做系統線程調度原理以及線程本地存儲等重要理論知識。這部份內容主要是爲從未接觸過底層知識的讀者準備的,若是讀者對這部分已經很熟了,則徹底能夠跳過這部分的閱讀。
  • 第二部分包括第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語言核心編程技術

 

相關文章
相關標籤/搜索