深度探索 Go語言 — 對象模型與 runtime 的原理、特性及應用

封幼林

  • 深度探索 Go語言 — 對象模型與 runtime 的原理、特性及應用-preview-1
  • 深度探索 Go語言 — 對象模型與 runtime 的原理、特性及應用-preview-2
  • 深度探索 Go語言 — 對象模型與 runtime 的原理、特性及應用-preview-3
深度探索 Go語言 — 對象模型與 runtime 的原理、特性及應用-preview-1

買這商品的人也買了...

商品描述

本書主要講解了Go語言一些關鍵特性的實現原理,Nicklaus Wirth大師曾經說過:算法+數據結構=程序,語言特性的實現也不外乎就是數據結構+代碼邏輯。 全書共分為4個部分:第一部分是基礎特性(第1章~第3章),第二部分是對象模型(第4章~第5章),第三部分是調度系統(第6章~第7章),第四部分是內存管理(第8章~第9章)。書中主要內容包括:指針、函數棧幀、調用約定、變量逃逸、Function Value、閉包、defer、panic、方法、Method Value、組合式繼承、接口、類型斷言、反射、goroutine、搶占式調度、同步、堆和棧的管理,以及GC等。 書中包含大量的探索示例和源碼分析,在學會應用的同時還能瞭解實現原理。書中絕大部分代碼都是用Go語言實現,還有少部分使用匯編語言,都可以使用Go官方SDK直接編譯。探索過程循序漸進條理清晰,用到的工具也都是SDK自帶,方便讀者親自上手實踐。 本書適合Go語言的初學者,在學習語言特性的同時瞭解其實現原理。更適合有一定的Go語言應用基礎,想要深入研究底層原理的技術人員。同樣適合有一些其他編程語言基礎,想要轉學Go語言的開發者。

目錄大綱

 

 

目錄

 

第1章匯編基礎

 

1.1x86通用寄存器

 

1.1.132位架構

 

1.1.264位架構

 

1.2常用匯編指令

 

1.2.1整數加減指令

 

1.2.2數據傳輸指令

 

1.2.3入棧和出棧指令

 

1.2.4分支跳轉指令

 

1.2.5過程調用指令

 

1.3內存分頁機制

 

1.3.1線性地址

 

1.3.280386兩級頁表

 

1.3.3PAE三級頁表

 

1.3.4x64四級頁表

 

1.3.5虛擬內存

 

1.4匯編代碼風格

 

1.5本章小結

 

第2章指針(7min)

 

2.1指針構成

 

2.1.1地址

 

2.1.2元素類型

 

2.2相關操作

 

2.2.1取地址

 

2.2.2解引用

 

2.2.3強制類型轉換

 

2.2.4指針運算

 

2.3unsafe包

 

2.3.1標準庫與keyword

 

2.3.2關於uintptr

 

2.3.3內存對齊

 

2.4本章小結

 

第3章函數(44min)

 

3.1棧幀

 

3.1.1棧幀佈局

 

3.1.2尋址方式

 

3.1.3又見內存對齊

 

3.1.4調用約定

 

3.1.5Go 1.17的變化

 

3.2逃逸分析

 

3.2.1什麽是逃逸分析

 

3.2.2不逃逸分析

 

3.2.3不逃逸判斷

 

3.3Function Value

 

3.3.1函數指針

 

3.3.2Function Value分析

 

3.3.3閉包

 

3.4defer

 

3.4.1最初的鏈表

 

3.4.2棧上分配

 

3.4.3高效的open coded defer

 

3.5panic

 

3.5.1gopanic()函數

 

3.5.2gorecover()函數

 

3.5.3嵌套的panic

 

3.5.4支持open coded defer

 

3.6本章小結

 

第4章方法(6min)

 

4.1接收者類型

 

4.1.1值類型

 

4.1.2指針類型

 

4.1.3包裝方法

 

4.2Method Value

 

4.2.1基於類型

 

4.2.2基於對象

 

4.3組合式繼承

 

4.3.1嵌入值

 

4.3.2嵌入指針

 

4.3.3多重繼承

 

4.4本章小結

 

第5章接口(27min)

 

5.1空接口

 

5.1.1一個更好的void*

 

5.1.2類型元數據

 

5.1.3逃逸與裝箱

 

5.2非空接口

 

5.2.1動態派發

 

5.2.2具體實現

 

5.2.3接收者類型

 

5.2.4組合式繼承

 

5.3類型斷言

 

5.3.1E To 具體類型

 

5.3.2E To I

 

5.3.3I To 具體類型

 

5.3.4I To I

 

5.4反射

 

5.4.1類型系統

 

5.4.2類型元數據詳細講解

 

5.4.3對數據的操作

 

5.4.4對鏈接器裁剪的影響

 

5.5本章小結

 

第6章goroutine(48min)

 

6.1進程、線程與協程

 

6.1.1進程

 

6.1.2線程

 

6.1.3協程

 

6.2IO多路復用

 

6.2.13種網絡IO模型

 

6.2.2示例對比

 

6.3巧妙結合

 

6.4GMP模型

 

6.4.1基本概念

 

6.4.2從GM到GMP

 

6.5GMP主要數據結構

 

6.5.1runtime.g

 

6.5.2runtime.m

 

6.5.3runtime.p

 

6.5.4schedt

 

6.6調度器初始化

 

6.6.1調度器初始化過程

 

6.6.2runtime.schedinit()函數

 

6.7G的創建與退出

 

6.7.1相關匯編函數

 

6.7.2runtime.newproc()函數

 

6.8調度循環

 

6.8.1runtime.schedule()函數

 

6.8.2runtime.findrunnable()函數

 

6.9搶占式調度

 

6.9.1Go 1.13的搶占式調度

 

6.9.2Go 1.14的搶占式調度

 

6.10timer

 

6.10.1一個示例

 

6.10.2數據結構

 

6.10.3操作函數

 

6.11netpoller

 

6.11.1跨平臺的netpoller

 

6.11.2TCP連接的Read()方法

 

6.12監控線程

 

6.12.1按需執行timer和netpoll

 

6.12.2搶占G和P

 

6.12.3強制執行GC

 

6.13本章小結

 

第7章同步(32min)

 

7.1Happens Before

 

7.1.1並發

 

7.1.2並行

 

7.2內存亂序

 

7.2.1編譯期亂序

 

7.2.2執行期亂序

 

7.2.3內存排序指令

 

7.3常見的鎖

 

7.3.1原子指令

 

7.3.2自旋鎖

 

7.3.3調度器對象

 

7.3.4優化的鎖

 

7.4Go語言的同步

 

7.4.1runtime.mutex

 

7.4.2semaphore

 

7.4.3sync.Mutex

 

7.4.4channel

 

7.5本章小結

 

第8章堆(17min)

 

8.1內存分配

 

8.1.1sizeclasses

 

8.1.2heapArena

 

8.1.3mspan

 

8.1.4mcentral

 

8.1.5mcache

 

8.1.6mallocgc

 

8.2垃圾回收

 

8.2.1GC root

 

8.2.2三色抽象

 

8.2.3寫屏障

 

8.2.4觸發方式

 

8.2.5GC Worker

 

8.2.6gctrace

 

8.3本章小結

 

第9章棧(8min)

 

9.1棧分配

 

9.1.1棧分配初始化

 

9.1.2棧分配邏輯

 

9.2棧增長

 

9.2.1棧增長檢測代碼

 

9.2.2棧增長函數

 

9.3棧收縮

 

9.4棧釋放

 

9.4.1小於或等於16KB的棧空間

 

9.4.2大於或等於32KB的棧空間

 

9.4.3棧釋放時機

 

9.5本章小結