定 價:¥119.00
作 者: | 劉丹冰 |
出版社: | 清華大學出版社 |
叢編項: | 計算機技術開發(fā)與應用叢書 |
標 簽: | 暫缺 |
ISBN: | 9787302613664 | 出版時間: | 2023-04-01 | 包裝: | 平裝 |
開本: | 16開 | 頁數(shù): | 字數(shù): |
第一篇Go語言修煉必經之路
第1章深入理解Go語言協(xié)程調度器GPM模型
1.1Go語言“調度器”的由來
1.1.1單進程時代不需要調度器
1.1.2多進程/多線程時代的調度器需求
1.1.3協(xié)程提高CPU的利用率
1.1.4Go語言的協(xié)程Goroutine
1.1.5被廢棄的Goroutine調度器
1.2Go語言調度器GPM模型的設計思想
1.2.1GPM模型
1.2.2調度器的設計策略
1.2.3go func() 調度流程
1.2.4調度器的生命周期
1.2.5可視化GPM編程
1.3Go調度器調度場景過程全解析
1.3.1場景1: G1創(chuàng)建G2
1.3.2場景2: G1執(zhí)行完畢
1.3.3場景3: G2開辟過多的G
1.3.4場景4: G2本地滿再創(chuàng)建G7
1.3.5場景5: G2本地未滿再創(chuàng)建G8
1.3.6場景6: 喚醒正在休眠的M
1.3.7場景7: 被喚醒的M2從全局隊列批量取G
1.3.8場景8: M2從M1中偷取
1.3.9場景9: 自旋線程的最大限制
1.3.10場景10: G發(fā)生阻塞的系統(tǒng)調用
1.3.11場景11: G發(fā)生非阻塞的系統(tǒng)調用
1.4小結
第2章Go語言混合寫屏障的GC全場景分析
2.1Go V1.3標記清除算法
2.1.1標記清除(Mark and Sweep)算法的詳細過程
2.1.2標記清除算法的缺點
2.2Go V1.5的三色標記法
2.2.1三色標記法的過程
2.2.2沒有STW的三色標記法
2.2.3觸發(fā)三色標記法不安全的必要條件
2.3Go V1.5 的屏障機制
2.3.1“強弱”三色不變式
2.3.2插入屏障
2.3.3刪除屏障
2.4Go V1.8的混合寫屏障
2.4.1混合寫屏障(Hybrid Write Barrier)規(guī)則
2.4.2場景1: 堆刪除引用,成為棧下游
2.4.3場景2: 棧刪除引用,成為棧下游
2.4.4場景3: 堆刪除引用,成為堆下游
2.4.5場景4: 棧刪除引用,成為堆下游
2.5小結
第3章Go語言內存管理洗髓經
3.1何為內存
3.2內存為什么需要管理
3.3操作系統(tǒng)是如何管理內存的
3.3.1虛擬內存
3.3.2MMU內存管理單元
3.3.3虛擬內存本身怎么存放
3.3.4CPU內存訪問過程
3.3.5內存的局部性
3.4如何用Go語言實現(xiàn)內存管理和內存池設計
3.4.1基于Cgo的內存C接口封裝
3.4.2基礎內存緩沖Buf實現(xiàn)
3.4.3內存池設計與實現(xiàn)
3.4.4內存池的功能單元測試
3.4.5內存管理應用接口
3.5Go語言內存管理之魂TCMalloc
3.5.1TCMalloc
3.5.2TCMalloc模型相關基礎結構
3.5.3ThreadCache
3.5.4CentralCache
3.5.5PageHeap
3.5.6TCMalloc的小對象分配
3.5.7TCMalloc的中對象分配
3.5.8TCMalloc的大對象分配
3.6Go語言堆內存管理
3.6.1Go語言內存模型層級結構
3.6.2Go語言內存管理單元相關概念
3.6.3MCache
3.6.4MCentral
3.6.5MHeap
3.6.6Tiny對象分配流程
3.6.7小對象分配流程
3.6.8大對象分配流程
3.7小結
第4章深入理解Linux網絡I/O復用并發(fā)模型
4.1網絡并發(fā)模型中的幾個基本概念
4.1.1流
4.1.2I/O操作
4.1.3阻塞等待
4.1.4非阻塞忙輪詢
4.1.5阻塞與非阻塞對比
4.2解決阻塞等待缺點的辦法
4.2.1阻塞死等待的缺點
4.2.2解決阻塞等待的辦法1: 多線程/多進程
4.2.3解決阻塞等待的辦法2: 非阻塞忙輪詢
4.2.4解決阻塞等待的辦法3: select
4.2.5解決阻塞等待的辦法4: epoll
4.3什么是epoll
4.4epoll的觸發(fā)模式
4.4.1水平觸發(fā)
4.4.2邊緣觸發(fā)
4.5簡單的epoll服務器
4.5.1服務器端實現(xiàn)
4.5.2客戶端實現(xiàn)
4.6Linux下常見的網絡I/O復用并發(fā)模型
4.6.1模型1: 單線程Accept(無I/O復用)
4.6.2模型2: 單線程Accept+多線程讀寫業(yè)務(無I/O復用)
4.6.3模型3: 單線程多路I/O復用
4.6.4模型4: 單線程多路I/O復用+多線程讀寫業(yè)務(業(yè)務工作池)
4.6.5模型5: 單線程I/O復用+多線程I/O復用(連接線程池)
4.6.6模型5(進程版): 單進程多路I/O復用+多進程I/O復用
4.6.7模型6: 單線程多路I/O復用+多線程I/O復用+多線程
4.7小結
第二篇Go語言編程進階之路
第5章有關Goroutine無限創(chuàng)建的分析
5.1從操作系統(tǒng)分析進程、線程、協(xié)程的區(qū)別
5.1.1進程內存
5.1.2線程內存
5.1.3執(zhí)行單元
5.2協(xié)程的切換成本
5.2.1協(xié)程切換成本
5.2.2線程切換成本
5.2.3內存占用
5.3Go是否可以無限創(chuàng)建,如何限定數(shù)量
5.3.1不控制Goroutine數(shù)量引發(fā)的問題
5.3.2一些簡單方法控制Goroutine的數(shù)量
5.4動態(tài)?;頦orker工作池設計
5.4.1如何確定一個Goroutine已經死亡
5.4.2Worker工作池的設計
5.4.3測試Worker工作池
5.5小結
第6章Go語言中的逃逸現(xiàn)象,變量“何時在棧、何時在堆”
6.1Go語言中的逃逸現(xiàn)象
6.1.1Go語言中訪問子函數(shù)的局部變量
6.1.2C/C++中訪問子函數(shù)的局部變量
6.2逃逸分析過程示例
6.2.1示例過程
6.2.2new的變量在棧還是堆
6.3普遍的逃逸規(guī)則
6.3.1逃逸范例1
6.3.2逃逸范例2
6.3.3逃逸范例3
6.3.4逃逸范例4
6.3.5逃逸范例5
6.3.6逃逸范例6
6.3.7逃逸范例7
6.3.8逃逸范例8
6.4小結
第7章interface剖析與Go語言中面向對象思想
7.1interface的賦值問題
7.2非空接口的interface內部構造
7.2.1案例分析
7.2.2空接口eface
7.2.3非空接口iface
7.3空接口的interface內部構造
7.4interface{}與*interface{}
7.5面向對象思維理解interface
7.5.1平鋪式的模塊設計
7.5.2面向對象中的開閉原則
7.5.3接口的意義
7.5.4耦合度極高的模塊關系設計
7.5.5面向抽象層依賴倒轉設計
7.6小結
第8章defer踐行中必備的要領
8.1defer的執(zhí)行順序
8.2defer與return誰先誰后
8.3函數(shù)返回值的初始化
8.4有名函數(shù)返回值遇見defer的情況
8.5defer遇見panic
8.5.1defer遇見panic,但是并不捕獲異常的情況
8.5.2defer遇見panic,并捕獲異常
8.6defer中包含panic
8.7defer下的函數(shù)參數(shù)包含子函數(shù)
8.8小結
第9章Go語言中常用的問題及性能調試實踐方法
9.1如何分析程序的運行時間與CPU利用率
9.1.1shell內置time指令
9.1.2/usr/bin/time指令
9.2如何分析Go語言程序的內存使用情況
9.2.1占用內存情況查看
9.2.2GODEBUG與gctrace
9.2.3runtime.ReadMemStats
9.2.4pprof工具
9.3如何獲取Go語言程序的CPU性能情況
9.3.1通過Web界面查看且得到profile文件
9.3.2使用pprof工具獲取信息
9.3.3profile文件獲取信息
9.3.4可視化圖形查看及分析
9.4小結
第10章make和new的原理性區(qū)別
10.1變量的聲明
10.2Go語言中make與new的區(qū)別
10.2.1new
10.2.2make
10.2.3make與new的異同
10.3slice與new關鍵字
10.4小結
第11章精通Go Modules項目依賴管理
11.1GOPATH的工作模式
11.1.1什么是GOPATH
11.1.2GOPATH模式的弊端
11.2Go Modules模式
11.2.1go mod命令
11.2.2go mod環(huán)境變量
11.2.3GO111MODULE
11.2.4GOPROXY
11.2.5direct
11.2.6GOSUMDB
11.2.7GONOPROXY/GONOSUMDB/GOPRIVATE
11.3使用Go Modules初始化項目
11.3.1開啟Go Modules
11.3.2初始化項目
11.3.3查看go.mod文件
11.3.4查看go.sum文件
11.4修改模塊的版本依賴關系
11.5小結
第12章ACID、CAP、BASE的分布式理論推進
12.1從本地事務到分布式理論
12.2ACID理論
12.3CAP理論
12.3.1一致性
12.3.2可用性
12.3.3分區(qū)容錯性
12.4CAP的“3選2”證明
12.4.1基本場景
12.4.2CAP特性
12.4.3分布式系統(tǒng)正常運行流程
12.4.4分布式系統(tǒng)異常運行流程
12.4.5“3選2”的必然性
12.5分布式BASE理論
12.6小結
第三篇Go語言框架設計之路
第13章Zinx框架基礎服務構建
13.1初探Zinx架構
13.2ZinxV0.1基礎服務
13.2.1ZinxV0.1 代碼實現(xiàn)
13.2.2Zinx框架單元測試樣例
13.2.3使用ZinxV0.1完成應用程序
13.3ZinxV0.2簡單的連接封裝與業(yè)務綁定
13.3.1ZinxV0.2代碼實現(xiàn)
13.3.2使用ZinxV0.2完成應用程序
13.4小結
第14章Zinx框架路由模塊設計與實現(xiàn)
14.1IRequest 消息請求抽象類
14.1.1創(chuàng)建抽象IRequest層
14.1.2實現(xiàn)Request類
14.2IRouter 路由配置抽象類
14.2.1創(chuàng)建抽象的IRouter層
14.2.2實現(xiàn)Router類
14.3ZinxV0.3集成簡單路由功能
14.3.1IServer增添路由添加功能
14.3.2Server類增添Router成員
14.3.3Connection類綁定一個Router成員
14.3.4在Connection調用注冊的Router處理業(yè)務
14.4Server傳遞Router參數(shù)Connection
14.5使用ZinxV0.3完成應用程序
14.5.1測試基于Zinx完成的服務器端應用
14.5.2啟動Server和Client
14.6小結
第15章Zinx全局配置
15.1ZinxV0.4增添全局配置代碼實現(xiàn)
15.2使用ZinxV0.4完成應用程序
15.3小結
第16章Zinx消息封裝模塊設計與實現(xiàn)
16.1創(chuàng)建消息封裝類型
16.2消息的封包與拆包
16.2.1創(chuàng)建拆包封包抽象類
16.2.2實現(xiàn)拆包封包類
16.2.3測試拆包封包功能
16.3ZinxV0.5代碼實現(xiàn)
16.3.1Request字段修改
16.3.2集成拆包過程
16.3.3提供封包的發(fā)送方法
16.3.4使用ZinxV0.5完成應用程序
16.4小結