PostgreSQL 原始碼解讀(3)- 如何閱讀原始碼

husthxd發表於2018-08-02

如何閱讀原始碼?

    先說結論,我的閱讀方式是透過自頂向下的方法掌握全域性,使用自底向上的方法深入理解。
自底向上的方法
    先說自底向上的方法。簡單來說,就是從一個具體的小功能點出發閱讀和實踐,然後再由此小功能擴充套件逐步的向上上溯到大模組,就好比種上一顆小樹,每天的施肥澆水,如果方法得當自然可以長成參天大樹。
    以閱讀PG的原始碼為例,可以透過psql從插入一行資料的最小方法/函式(PageAddItemExtended)為出發點,深入理解該函式後,使用gdb跟蹤該函式的呼叫棧,根據呼叫棧的函式資訊逐步上溯到最頂層的呼叫入口函式或主函式,每上溯一層就把該層函式相關的資料結構、宏定義和依賴的子函式完全徹底的理解清楚。透過這麼一個過程,把插入資料相關聯的知識體系建立起來,比如Page儲存結構、Buffer的管理、WAL日誌相關管理、SQL解析執行、前後臺介面等相關知識。有了這個脈絡,有了相關的資料結構作為基礎,再來理解其他操作,比如UPDATE/DELETE等DML、CREATE TABLE/ALTER TABLE等DDL語句、SELECT等查詢語句等就相對容易很多。
自頂向下的方法
    與自底向上的方法相對的是自頂向下的方法,閱讀原始碼的初期可以使用這種方法建立原始碼的體系結構,有利於全域性把控,就好比原來一棵大樹,如果一開始關注某片樹葉,某個枝幹,自然無感,但如果從主樹幹出發來看整個大樹,那就基本可以看到這顆大樹的全貌了。
    閱讀細節的時候可以使用自頂往下的方法嗎?我的個人經驗是不太適合,還是以大樹做個類比吧。從主樹幹出發,這時候有N個子幹,從某個子幹進入,有M個分支,從分支進入子分支,又有X個子子分支,除非腦容量夠大,否則裡面的細節會讓人望而生畏。
    本是凡人,還是踏踏實實做些凡人能做的力所能及的事情吧。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6906/viewspace-2374913/,如需轉載,請註明出處,否則將追究法律責任。

相關文章