iT邦幫忙

鐵人檔案

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

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

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

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

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

讓我們一起努力吧!

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

第十一天:繼續奮戰 schedinit

前情提要 昨日也追蹤了 schedinit 函式的幾個初始化部份。 schedinit ... 今天看完就可以過半了吧 ... alginit()...

2019-09-26 ‧ 由 高魁良 分享
DAY 12

第十二天:簡單除錯 GO 語言程式

前情提要 schedinit 函式終於接近尾聲。昨日追蹤的是與 module、signal 相關的幾項初始化。 schedinit ... goargs(...

2019-09-27 ‧ 由 高魁良 分享
DAY 13

第十三天:更多除錯訊息

前情提要 昨日提到除錯選項的 allocfreetrace,但若要觀察 scheduler 行為,hw 範例還是太單薄了一些。 schedinit ......

2019-09-28 ‧ 由 高魁良 分享
DAY 14

第十四天:schedinit 告一段落

前情提要 原本打算昨日結束整個 schedinit 部份,但光是寫範例程式和追蹤其中的 P-M-G 關係就花了許多時間... schedinit ......

2019-09-29 ‧ 由 高魁良 分享
DAY 15

第十五天:追蹤 newproc

前情提要 昨日終於結束了 schedinit 部份,主要是追 gcinit 函式,還有從比較抽象的角度瀏覽了一些垃圾回收的機制。 退回一層 回到我們之前所在的...

2019-09-30 ‧ 由 高魁良 分享
DAY 16

第十六天:newproc1 之前的堆疊準備動作

前情提要 昨日開始了 newproc 函式,概念上應該是要準備一個新的 goroutine 準備執行?通常是用在 go statement 的生成,但是這裡是...

2019-10-01 ‧ 由 高魁良 分享
DAY 17

第十七天:看看 systemstack 函式呼叫

前情提要 昨日我們以相當貼近記憶體的方式看完了 newproc 函式,主要是在兜出後續呼叫所需要的參數,為接下來的 systemstack 呼叫作準備。 進入...

2019-10-02 ‧ 由 高魁良 分享
DAY 18

第十八天:GO 語言運行模型的三項之力

前情提要 昨日我們簡單路過 systemstack 函式之後開始了 newproc1 函式。 暫停回顧 P-M-G 關係 雖然在第 10 天時有簡單介紹註解中...

2019-10-03 ‧ 由 高魁良 分享
DAY 19

第十九天:G 的取得路徑

前情提要 昨日我們都在爬梳註解與其他資料,企圖從比較鳥瞰的角度去觀察排程器與 GO 的系統模型。 acquirem 和 releasem(在 runtime/...

2019-10-04 ‧ 由 高魁良 分享
DAY 20

第二十天:新生 goroutine 的初始狀態

前情提要 昨日我們走過 newproc1 函式的最開頭部份;順利的情況下,能夠取得一個新的 G。 使用 gdb 驗證 我們將斷點設在 runtime.newp...

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