第十一屆 佳作

software-dev
入吾 Go 中:走訪 Go 語言內部實作
高魁良

系列文章

DAY 21

第二十一天:配置新的 goroutine

前情提要 昨日我們終於確定取得一個新的 G 物件,並且初次見識到 G 的狀態轉移。 快轉一點點 由於接下來的部份有些雜亂,筆者還是跳過了一些部份,大致交待如下...

DAY 22

第二十二天:領取號碼牌

前情提要 昨日看到 gostartcallfn 函式眼睛一亮,但終究只是設定一些 context,runtime 還未結束,仍需繼續 trace。 接下去呢?...

DAY 23

第二十三天:開始排隊

前情提要 之前取得的 newg 狀態已經調整為可執行,而且也已經分配好 ID 了。 newproc1 的尾巴 if raceenabled {...

DAY 24

第二十四天:上膛的 goroutine

前情提要 走到 newproc1 函式的結尾。新的 goroutine 已經如子彈一般上膛了。 一路返回 newproc1 回傳之後會一路回到最初的 rt0_...

DAY 25

第二十五天:minit 與 signal 設置

前情提要 昨日進入到 mstart 函式之中,可算是整個 bootstrap 的最後階段。在裡面走到 mstart1,也透過 gdb 觀察得知就是在這裡面執行...

DAY 26

第二十六天:signal 初始化收尾

前情提要 昨日進入 minit 之後再進到 minitSignals,看完了針對 signal 使用的堆疊如何設置。 開始 minitSignalMask f...

DAY 27

第二十七天:goroutine 執行中

前情提要 昨日加前日,將 signal 相關的機制瀏覽完,然後準備進入 schedule。 加入排程 終於來到這個無法折返點了。schedule 函式也還是一...

DAY 28

第二十八天:其他的 M 登場

前情提要 昨日終於進入了 runtime.main,並將全域的 mainStarted 設置為真,昭告天下執行期環境已經快要完備了。 重返 systemsta...

DAY 29

第二十九天:終點的 main.main

前情提要 昨日一路單槍匹馬的執行流程 fork 出了一個 sysmon 執行緒在另外一個 M 上,正式成為多線程並行程式了。 多線程除錯的現實 我們現在有兩隻...

DAY 30

第三十天:繼續前進

開始 回首第一篇規劃這個系列方向時,我一股腦列出許多主題,現在看來當然是像是螞蟻要對抗巨人一般可笑。事實上,認真要追蹤那些主題的話,都可以寫成多於一整個系列的...