PostgreSQL 原始碼解讀(3)- 如何閱讀原始碼
如何閱讀原始碼?
先說結論,我的閱讀方式是透過自頂向下的方法掌握全域性,使用自底向上的方法深入理解。
自底向上的方法
先說自底向上的方法。簡單來說,就是從一個具體的小功能點出發閱讀和實踐,然後再由此小功能擴充套件逐步的向上上溯到大模組,就好比種上一顆小樹,每天的施肥澆水,如果方法得當自然可以長成參天大樹。
以閱讀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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【原始碼閱讀】AndPermission原始碼閱讀原始碼
- 如何閱讀Java原始碼?Java原始碼
- 如何閱讀框架原始碼框架原始碼
- 如何閱讀jdk原始碼?JDK原始碼
- 如何快速閱讀原始碼原始碼
- 【原始碼閱讀】Glide原始碼閱讀之into方法(三)原始碼IDE
- 【原始碼閱讀】Glide原始碼閱讀之with方法(一)原始碼IDE
- 【原始碼閱讀】Glide原始碼閱讀之load方法(二)原始碼IDE
- 如何高效閱讀Github原始碼Github原始碼
- AmplifyImpostors原始碼閱讀原始碼
- stack原始碼閱讀原始碼
- AQS原始碼閱讀AQS原始碼
- delta原始碼閱讀原始碼
- CountDownLatch原始碼閱讀CountDownLatch原始碼
- HashMap 原始碼閱讀HashMap原始碼
- fuzz原始碼閱讀原始碼
- ConcurrentHashMap原始碼閱讀HashMap原始碼
- HashMap原始碼閱讀HashMap原始碼
- Mux 原始碼閱讀UX原始碼
- ReactorKit原始碼閱讀React原始碼
- Vollery原始碼閱讀(—)原始碼
- NGINX原始碼閱讀Nginx原始碼
- ThreadLocal原始碼閱讀thread原始碼
- 原始碼閱讀-HashMap原始碼HashMap
- Runtime 原始碼閱讀原始碼
- RunLoop 原始碼閱讀OOP原始碼
- PostgreSQL 原始碼解讀(246)- plpgsql(CreateFunction-SearchSysCache3)SQL原始碼Function
- PostgreSQL 原始碼解讀(151)- PG Tools#3(StartLogStreamer)SQL原始碼
- PostgreSQL 原始碼解讀(219)- Locks(Overview)SQL原始碼View
- PostgreSQL 原始碼解讀(241)- plpgsql(CreateFunction)SQL原始碼Function
- 【詳解】ThreadPoolExecutor原始碼閱讀(三)thread原始碼
- 【詳解】ThreadPoolExecutor原始碼閱讀(二)thread原始碼
- 【詳解】ThreadPoolExecutor原始碼閱讀(一)thread原始碼
- Redis【1】- 如何閱讀 Redis原始碼Redis原始碼
- Redis【1】- 如何閱讀 Redis 原始碼Redis原始碼
- 如何閱讀一份原始碼?原始碼
- 初學者如何閱讀原始碼?原始碼
- 如何閱讀原始碼–Koa為例原始碼