iT邦幫忙

鐵人檔案

第 11 屆 iThome 鐵人賽
回列表
Software Development

入吾 Go 中:走訪 Go 語言內部實作 系列

說到 Go 語言,你會想到什麼呢?
簡潔?美麗?強大?無所不在?從筆者的角度來看,這些都是 Go 語言的一些形容詞而已。

「存在先於本質」,可是,Go 語言到底是什麼?這個問題可能又不免太大了。

秉持著鐵人賽的精神,我們就從 Hello World 開始吧!在接下來的 30 天當中,筆者將使用靜態的 vim-go 與動態的 gdb 追蹤工具觀察 Go 語言程式,目標是理解重要標準函式庫的實作並妥善的解說給讀者;如果能夠來得及的話,也希望能夠涵蓋到其他面向,比方說 Go compiler 之類的。

讓我們一起努力吧!

鐵人鍊成 | 共 30 篇文章 | 43 人訂閱 訂閱系列文 RSS系列文
DAY 21

第二十一天:配置新的 goroutine

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

2019-10-06 ‧ 由 高魁良 分享
DAY 22

第二十二天:領取號碼牌

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

2019-10-07 ‧ 由 高魁良 分享
DAY 23

第二十三天:開始排隊

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

2019-10-08 ‧ 由 高魁良 分享
DAY 24

第二十四天:上膛的 goroutine

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

2019-10-09 ‧ 由 高魁良 分享
DAY 25

第二十五天:minit 與 signal 設置

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

2019-10-10 ‧ 由 高魁良 分享
DAY 26

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

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

2019-10-11 ‧ 由 高魁良 分享
DAY 27

第二十七天:goroutine 執行中

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

2019-10-12 ‧ 由 高魁良 分享
DAY 28

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

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

2019-10-13 ‧ 由 高魁良 分享
DAY 29

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

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

2019-10-14 ‧ 由 高魁良 分享
DAY 30

第三十天:繼續前進

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

2019-10-15 ‧ 由 高魁良 分享