舉報

會員
深入理解Go語言
劉丹冰編著 著
更新時間:2025-04-16 04:48:46
開會員,本書免費讀 >
最新章節:
圖書推薦
本書為深入理解學習Go語言必經之路中的重點知識領域,采用大量精美詳細的圖文介紹,文章講解深入淺出,極大降低了理解Golang底層精髓的學習門檻。本書包含3篇:第一篇為深度理論篇(第1章~第4章),包含深入理解Golang中GPM模型、深入理解Golang垃圾回收GC三色標記與混合寫屏障、深入理解Golang內存管理模型、網絡IO復用模型等。第二篇為Golang實戰中需要進階的知識盲區介紹(第5章~第12章)。第三篇為基于Golang從0到1的實現輕量級網絡服務框架Zinx及相關應用案例。本書主要的面向讀者是已經具有軟件編程開發經驗的工程師、系統開發工程師、期望由Python、PHP、C/C++、Ruby、Java等編程語言轉職到Golang開發的后端工程師、期望深入理解Go語言特性的計算機軟件學者等。
- 圖書推薦 更新時間:2025-04-16 04:48:46
- 21.11 小結
- 21.10 移動與跨越格子的AOI廣播
- 21.9 玩家下線
- 21.8 移動位置與未跨越格子的AOI廣播
- 21.7 上線位置信息同步
- 21.6.2 世界聊天系統實現
- 21.6.1 世界管理模塊
- 21.6 世界聊天系統實現
- 21.5.2 用戶上線流程
- 21.5.1 構建項目
- 21.5 構建項目與用戶上線
- 21.4.2 Proto3協議定義
- 21.4.1 協議定義
- 21.4 MMO游戲服務器應用協議
- 21.3.6 基于ProtoBuf協議的Go語言編程
- 21.3.5 編譯ProtoBuf
- 21.3.4 ProtoBuf語法
- 21.3.3 ProtoBuf環境安裝
- 21.3.2 數據交換格式
- 21.3.1 Protocol Buffer簡介
- 21.3 數據傳輸協議Protocol Buffer
- 21.2.6 AOI模塊單元測試
- 21.2.5 AOI管理區域格子添加刪除操作
- 21.2.4 求出九宮格
- 21.2.3 實現AOI管理模塊
- 21.2.2 實現AOI格子結構
- 21.2.1 網絡法實現AOI算法
- 21.2 MMO多人在線游戲AOI算法
- 21.1 應用案例介紹
- 第21章 基于Zinx框架的應用項目案例
- 20.3 小結
- 20.2.3 連接屬性Zinx-V0.10單元測試
- 20.2.2 連接屬性方法實現
- 20.2.1 給連接添加連接配置接口
- 20.2 Zinx的連接屬性設置
- 20.1.5 使用Zinx-V0.9完成應用程序
- 20.1.4 注冊連接啟動/停止自定義Hook方法功能
- 20.1.3 連接的帶緩沖的發包方法
- 20.1.2 將連接管理模塊集成到Zinx中
- 20.1.1 創建連接管理模塊
- 20.1 連接管理
- 第20章 Zinx連接管理及屬性設置
- 19.6 小結
- 19.5 使用Zinx-V0.8完成應用程序
- 19.4 Zinx-V0.8代碼實現
- 19.3 將消息發送給消息隊列
- 19.2 創建及啟動Worker工作池
- 19.1 創建消息隊列
- 第19章 Zinx消息隊列和任務工作池設計與實現
- 18.2 小結
- 18.1 Zinx-V0.7代碼實現
- 第18章 Zinx讀寫分離模型構建
- 17.4 小結
- 17.3 使用Zinx-V0.6完成應用程序
- 17.2 Zinx-V0.6代碼實現
- 17.1.2 實現消息管理模塊
- 17.1.1 創建消息管理模塊抽象類
- 17.1 創建消息管理模塊
- 第17章 Zinx多路由模式設計與實現
- 16.4 小結
- 16.3.4 使用Zinx-V0.5完成應用程序
- 16.3.3 提供封包的發送方法
- 16.3.2 集成拆包過程
- 16.3.1 Request字段修改
- 16.3 Zinx-V0.5代碼實現
- 16.2.3 測試拆包封包功能
- 16.2.2 實現拆包封包類
- 16.2.1 創建拆包封包抽象類
- 16.2 消息的封包與拆包
- 16.1 創建消息封裝類型
- 第16章 Zinx消息封裝模塊設計與實現
- 15.3 小結
- 15.2 使用Zinx-V0.4完成應用程序
- 15.1 Zinx-V0.4增添全局配置代碼實現
- 第15章 Zinx全局配置
- 14.6 小結
- 14.5.2 啟動Server和Client
- 14.5.1 測試基于Zinx完成的服務器端應用
- 14.5 使用Zinx-V0.3完成應用程序
- 14.4 Server傳遞Router參數Connection
- 14.3.4 在Connection調用注冊的Router處理業務
- 14.3.3 Connection類綁定一個Router成員
- 14.3.2 Server類增添Router成員
- 14.3.1 IServer增添路由添加功能
- 14.3 Zinx-V0.3集成簡單路由功能
- 14.2.2 實現Router類
- 14.2.1 創建抽象的IRouter層
- 14.2 IRouter路由配置抽象類
- 14.1.2 實現Request類
- 14.1.1 創建抽象IRequest層
- 14.1 IRequest消息請求抽象類
- 第14章 Zinx框架路由模塊設計與實現
- 13.4 小結
- 13.3.2 使用Zinx-V0.2完成應用程序
- 13.3.1 Zinx-V0.2代碼實現
- 13.3 Zinx-V0.2簡單的連接封裝與業務綁定
- 13.2.3 使用Zinx-V0.1完成應用程序
- 13.2.2 Zinx框架單元測試樣例
- 13.2.1 Zinx-V0.1代碼實現
- 13.2 Zinx-V0.1基礎服務
- 13.1 初探Zinx架構
- 第13章 Zinx框架基礎服務構建
- 第三篇 Go語言框架設計之路
- 12.6 小結
- 12.5 分布式BASE理論
- 12.4.5 “3選2”的必然性
- 12.4.4 分布式系統異常運行流程
- 12.4.3 分布式系統正常運行流程
- 12.4.2 CAP特性
- 12.4.1 基本場景
- 12.4 CAP的“3選2”證明
- 12.3.3 分區容錯性
- 12.3.2 可用性
- 12.3.1 一致性
- 12.3 CAP理論
- 12.2 ACID理論
- 12.1 從本地事務到分布式理論
- 第12章 ACID、CAP、BASE的分布式理論推進
- 11.5 小結
- 11.4 修改模塊的版本依賴關系
- 11.3.4 查看go.sum文件
- 11.3.3 查看go.mod文件
- 11.3.2 初始化項目
- 11.3.1 開啟Go Modules
- 11.3 使用Go Modules初始化項目
- 11.2.7 GONOPROXY/GONOSUMDB/GOPRIVATE
- 11.2.6 GOSUMDB
- 11.2.5 direct
- 11.2.4 GOPROXY
- 11.2.3 GO111MODULE
- 11.2.2 go mod環境變量
- 11.2.1 go mod命令
- 11.2 Go Modules模式
- 11.1.2 GOPATH模式的弊端
- 11.1.1 什么是GOPATH
- 11.1 GOPATH的工作模式
- 第11章 精通Go Modules項目依賴管理
- 10.4 小結
- 10.3 slice與new關鍵字
- 10.2.3 make與new的異同
- 10.2.2 make
- 10.2.1 new
- 10.2 Go語言中make與new的區別
- 10.1 變量的聲明
- 第10章 make和new的原理性區別
- 9.4 小結
- 9.3.4 可視化圖形查看及分析
- 9.3.3 profile文件獲取信息
- 9.3.2 使用pprof工具獲取信息
- 9.3.1 通過Web界面查看且得到profile文件
- 9.3 如何獲取Go語言程序的CPU性能情況
- 9.2.4 pprof工具
- 9.2.3 runtime.ReadMemStats
- 9.2.2 GODEBUG與gctrace
- 9.2.1 占用內存情況查看
- 9.2 如何分析Go語言程序的內存使用情況
- 9.1.2 /usr/bin/time指令
- 9.1.1 shell內置time指令
- 9.1 如何分析程序的運行時間與CPU利用率
- 第9章 Go語言中常用的問題及性能調試實踐方法
- 8.8 小結
- 8.7 defer下的函數參數包含子函數
- 8.6 defer中包含panic
- 8.5.2 defer遇見panic,并捕獲異常
- 8.5.1 defer遇見panic,但是并不捕獲異常的情況
- 8.5 defer遇見panic
- 8.4 有名函數返回值遇見defer的情況
- 8.3 函數返回值的初始化
- 8.2 defer與return誰先誰后
- 8.1 defer的執行順序
- 第8章 defer踐行中必備的要領
- 7.6 小結
- 7.5.5 面向抽象層依賴倒轉設計
- 7.5.4 耦合度極高的模塊關系設計
- 7.5.3 接口的意義
- 7.5.2 面向對象中的開閉原則
- 7.5.1 平鋪式的模塊設計
- 7.5 面向對象思維理解interface
- 7.4 interface{}與?interface{}
- 7.3 空接口的interface內部構造
- 7.2.3 非空接口iface
- 7.2.2 空接口eface
- 7.2.1 案例分析
- 7.2 非空接口的interface內部構造
- 7.1 interface的賦值問題
- 第7章 interface剖析與Go語言中面向對象思想
- 6.4 小結
- 6.3.8 逃逸范例8
- 6.3.7 逃逸范例7
- 6.3.6 逃逸范例6
- 6.3.5 逃逸范例5
- 6.3.4 逃逸范例4
- 6.3.3 逃逸范例3
- 6.3.2 逃逸范例2
- 6.3.1 逃逸范例1
- 6.3 普遍的逃逸規則
- 6.2.2 new的變量在棧還是堆
- 6.2.1 示例過程
- 6.2 逃逸分析過程示例
- 6.1.2 C/C++中訪問子函數的局部變量
- 6.1.1 Go語言中訪問子函數的局部變量
- 6.1 Go語言中的逃逸現象
- 第6章 Go語言中的逃逸現象,變量“何時在棧、何時在堆”
- 5.5 小結
- 5.4.3 測試Worker工作池
- 5.4.2 Worker工作池的設計
- 5.4.1 如何確定一個Goroutine已經死亡
- 5.4 動態?;頦orker工作池設計
- 5.3.2 一些簡單方法控制Goroutine的數量
- 5.3.1 不控制Goroutine數量引發的問題
- 5.3 Go是否可以無限創建,如何限定數量
- 5.2.3 內存占用
- 5.2.2 線程切換成本
- 5.2.1 協程切換成本
- 5.2 協程的切換成本
- 5.1.3 執行單元
- 5.1.2 線程內存
- 5.1.1 進程內存
- 5.1 從操作系統分析進程、線程、協程的區別
- 第5章 有關Goroutine無限創建的分析
- 第二篇 Go語言編程進階之路
- 4.7 小結
- 4.6.7 模型6:單線程多路I/O復用+多線程I/O復用+多線程
- 4.6.6 模型5(進程版):單進程多路I/O復用+多進程I/O復用
- 4.6.5 模型5:單線程I/O復用+多線程I/O復用(連接線程池)
- 4.6.4 模型4:單線程多路I/O復用+多線程讀寫業務(業務工作池)
- 4.6.3 模型3:單線程多路I/O復用
- 4.6.2 模型2:單線程Accept+多線程讀寫業務(無I/O復用)
- 4.6.1 模型1:單線程Accept(無I/O復用)
- 4.6 Linux下常見的網絡I/O復用并發模型
- 4.5.2 客戶端實現
- 4.5.1 服務器端實現
- 4.5 簡單的epoll服務器
- 4.4.2 邊緣觸發
- 4.4.1 水平觸發
- 4.4 epoll的觸發模式
- 4.3 什么是epoll
- 4.2.5 解決阻塞等待的辦法4:epoll
- 4.2.4 解決阻塞等待的辦法3:select
- 4.2.3 解決阻塞等待的辦法2:非阻塞忙輪詢
- 4.2.2 解決阻塞等待的辦法1:多線程/多進程
- 4.2.1 阻塞死等待的缺點
- 4.2 解決阻塞等待缺點的辦法
- 4.1.5 阻塞與非阻塞對比
- 4.1.4 非阻塞忙輪詢
- 4.1.3 阻塞等待
- 4.1.2 I/O操作
- 4.1.1 流
- 4.1 網絡并發模型中的幾個基本概念
- 第4章 深入理解Linux網絡I/O復用并發模型
- 3.7 小結
- 3.6.8 大對象分配流程
- 3.6.7 小對象分配流程
- 3.6.6 Tiny對象分配流程
- 3.6.5 MHeap
- 3.6.4 MCentral
- 3.6.3 MCache
- 3.6.2 Go語言內存管理單元相關概念
- 3.6.1 Go語言內存模型層級結構
- 3.6 Go語言堆內存管理
- 3.5.8 TCMalloc的大對象分配
- 3.5.7 TCMalloc的中對象分配
- 3.5.6 TCMalloc的小對象分配
- 3.5.5 PageHeap
- 3.5.4 CentralCache
- 3.5.3 ThreadCache
- 3.5.2 TCMalloc模型相關基礎結構
- 3.5.1 TCMalloc
- 3.5 Go語言內存管理之魂TCMalloc
- 3.4.5 內存管理應用接口
- 3.4.4 內存池的功能單元測試
- 3.4.3 內存池設計與實現
- 3.4.2 基礎內存緩沖Buf實現
- 3.4.1 基于Cgo的內存C接口封裝
- 3.4 如何用Go語言實現內存管理和內存池設計
- 3.3.5 內存的局部性
- 3.3.4 CPU內存訪問過程
- 3.3.3 虛擬內存本身怎么存放
- 3.3.2 MMU內存管理單元
- 3.3.1 虛擬內存
- 3.3 操作系統是如何管理內存的
- 3.2 內存為什么需要管理
- 3.1 何為內存
- 第3章 Go語言內存管理洗髓經
- 2.5 小結
- 2.4.5 場景4:棧刪除引用,成為堆下游
- 2.4.4 場景3:堆刪除引用,成為堆下游
- 2.4.3 場景2:棧刪除引用,成為棧下游
- 2.4.2 場景1:堆刪除引用,成為棧下游
- 2.4.1 混合寫屏障(Hybrid Write Barrier)規則
- 2.4 Go V1.8的混合寫屏障
- 2.3.3 刪除屏障
- 2.3.2 插入屏障
- 2.3.1 “強-弱”三色不變式
- 2.3 Go V1.5的屏障機制
- 2.2.3 觸發三色標記法不安全的必要條件
- 2.2.2 沒有STW的三色標記法
- 2.2.1 三色標記法的過程
- 2.2 Go V1.5的三色標記法
- 2.1.2 標記清除算法的缺點
- 2.1.1 標記清除(Mark and Sweep)算法的詳細過程
- 2.1 Go V1.3標記-清除算法
- 第2章 Go語言混合寫屏障的GC全場景分析
- 1.4 小結
- 1.3.11 場景11:G發生非阻塞的系統調用
- 1.3.10 場景10:G發生阻塞的系統調用
- 1.3.9 場景9:自旋線程的最大限制
- 1.3.8 場景8:M2從M1中偷取
- 1.3.7 場景7:被喚醒的M2從全局隊列批量取G
- 1.3.6 場景6:喚醒正在休眠的M
- 1.3.5 場景5:G2本地未滿再創建G8
- 1.3.4 場景4:G2本地滿再創建G7
- 1.3.3 場景3:G2開辟過多的G
- 1.3.2 場景2:G1執行完畢
- 1.3.1 場景1:G1創建G2
- 1.3 Go調度器調度場景過程全解析
- 1.2.5 可視化GPM編程
- 1.2.4 調度器的生命周期
- 1.2.3 go func()調度流程
- 1.2.2 調度器的設計策略
- 1.2.1 GPM模型
- 1.2 Go語言調度器GPM模型的設計思想
- 1.1.5 被廢棄的Goroutine調度器
- 1.1.4 Go語言的協程Goroutine
- 1.1.3 協程提高CPU的利用率
- 1.1.2 多進程/多線程時代的調度器需求
- 1.1.1 單進程時代不需要調度器
- 1.1 Go語言“調度器”的由來
- 第1章 深入理解Go語言協程調度器GPM模型
- 第一篇 Go語言修煉必經之路
- 前言
- 序二
- 序一
- 內容簡介
- 作者簡介
- 版權信息
- 封面
- 封面
- 版權信息
- 作者簡介
- 內容簡介
- 序一
- 序二
- 前言
- 第一篇 Go語言修煉必經之路
- 第1章 深入理解Go語言協程調度器GPM模型
- 1.1 Go語言“調度器”的由來
- 1.1.1 單進程時代不需要調度器
- 1.1.2 多進程/多線程時代的調度器需求
- 1.1.3 協程提高CPU的利用率
- 1.1.4 Go語言的協程Goroutine
- 1.1.5 被廢棄的Goroutine調度器
- 1.2 Go語言調度器GPM模型的設計思想
- 1.2.1 GPM模型
- 1.2.2 調度器的設計策略
- 1.2.3 go func()調度流程
- 1.2.4 調度器的生命周期
- 1.2.5 可視化GPM編程
- 1.3 Go調度器調度場景過程全解析
- 1.3.1 場景1:G1創建G2
- 1.3.2 場景2:G1執行完畢
- 1.3.3 場景3:G2開辟過多的G
- 1.3.4 場景4:G2本地滿再創建G7
- 1.3.5 場景5:G2本地未滿再創建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發生阻塞的系統調用
- 1.3.11 場景11:G發生非阻塞的系統調用
- 1.4 小結
- 第2章 Go語言混合寫屏障的GC全場景分析
- 2.1 Go V1.3標記-清除算法
- 2.1.1 標記清除(Mark and Sweep)算法的詳細過程
- 2.1.2 標記清除算法的缺點
- 2.2 Go V1.5的三色標記法
- 2.2.1 三色標記法的過程
- 2.2.2 沒有STW的三色標記法
- 2.2.3 觸發三色標記法不安全的必要條件
- 2.3 Go V1.5的屏障機制
- 2.3.1 “強-弱”三色不變式
- 2.3.2 插入屏障
- 2.3.3 刪除屏障
- 2.4 Go V1.8的混合寫屏障
- 2.4.1 混合寫屏障(Hybrid Write Barrier)規則
- 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 操作系統是如何管理內存的
- 3.3.1 虛擬內存
- 3.3.2 MMU內存管理單元
- 3.3.3 虛擬內存本身怎么存放
- 3.3.4 CPU內存訪問過程
- 3.3.5 內存的局部性
- 3.4 如何用Go語言實現內存管理和內存池設計
- 3.4.1 基于Cgo的內存C接口封裝
- 3.4.2 基礎內存緩沖Buf實現
- 3.4.3 內存池設計與實現
- 3.4.4 內存池的功能單元測試
- 3.4.5 內存管理應用接口
- 3.5 Go語言內存管理之魂TCMalloc
- 3.5.1 TCMalloc
- 3.5.2 TCMalloc模型相關基礎結構
- 3.5.3 ThreadCache
- 3.5.4 CentralCache
- 3.5.5 PageHeap
- 3.5.6 TCMalloc的小對象分配
- 3.5.7 TCMalloc的中對象分配
- 3.5.8 TCMalloc的大對象分配
- 3.6 Go語言堆內存管理
- 3.6.1 Go語言內存模型層級結構
- 3.6.2 Go語言內存管理單元相關概念
- 3.6.3 MCache
- 3.6.4 MCentral
- 3.6.5 MHeap
- 3.6.6 Tiny對象分配流程
- 3.6.7 小對象分配流程
- 3.6.8 大對象分配流程
- 3.7 小結
- 第4章 深入理解Linux網絡I/O復用并發模型
- 4.1 網絡并發模型中的幾個基本概念
- 4.1.1 流
- 4.1.2 I/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.4 epoll的觸發模式
- 4.4.1 水平觸發
- 4.4.2 邊緣觸發
- 4.5 簡單的epoll服務器
- 4.5.1 服務器端實現
- 4.5.2 客戶端實現
- 4.6 Linux下常見的網絡I/O復用并發模型
- 4.6.1 模型1:單線程Accept(無I/O復用)
- 4.6.2 模型2:單線程Accept+多線程讀寫業務(無I/O復用)
- 4.6.3 模型3:單線程多路I/O復用
- 4.6.4 模型4:單線程多路I/O復用+多線程讀寫業務(業務工作池)
- 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無限創建的分析
- 5.1 從操作系統分析進程、線程、協程的區別
- 5.1.1 進程內存
- 5.1.2 線程內存
- 5.1.3 執行單元
- 5.2 協程的切換成本
- 5.2.1 協程切換成本
- 5.2.2 線程切換成本
- 5.2.3 內存占用
- 5.3 Go是否可以無限創建,如何限定數量
- 5.3.1 不控制Goroutine數量引發的問題
- 5.3.2 一些簡單方法控制Goroutine的數量
- 5.4 動態?;頦orker工作池設計
- 5.4.1 如何確定一個Goroutine已經死亡
- 5.4.2 Worker工作池的設計
- 5.4.3 測試Worker工作池
- 5.5 小結
- 第6章 Go語言中的逃逸現象,變量“何時在棧、何時在堆”
- 6.1 Go語言中的逃逸現象
- 6.1.1 Go語言中訪問子函數的局部變量
- 6.1.2 C/C++中訪問子函數的局部變量
- 6.2 逃逸分析過程示例
- 6.2.1 示例過程
- 6.2.2 new的變量在棧還是堆
- 6.3 普遍的逃逸規則
- 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.1 interface的賦值問題
- 7.2 非空接口的interface內部構造
- 7.2.1 案例分析
- 7.2.2 空接口eface
- 7.2.3 非空接口iface
- 7.3 空接口的interface內部構造
- 7.4 interface{}與?interface{}
- 7.5 面向對象思維理解interface
- 7.5.1 平鋪式的模塊設計
- 7.5.2 面向對象中的開閉原則
- 7.5.3 接口的意義
- 7.5.4 耦合度極高的模塊關系設計
- 7.5.5 面向抽象層依賴倒轉設計
- 7.6 小結
- 第8章 defer踐行中必備的要領
- 8.1 defer的執行順序
- 8.2 defer與return誰先誰后
- 8.3 函數返回值的初始化
- 8.4 有名函數返回值遇見defer的情況
- 8.5 defer遇見panic
- 8.5.1 defer遇見panic,但是并不捕獲異常的情況
- 8.5.2 defer遇見panic,并捕獲異常
- 8.6 defer中包含panic
- 8.7 defer下的函數參數包含子函數
- 8.8 小結
- 第9章 Go語言中常用的問題及性能調試實踐方法
- 9.1 如何分析程序的運行時間與CPU利用率
- 9.1.1 shell內置time指令
- 9.1.2 /usr/bin/time指令
- 9.2 如何分析Go語言程序的內存使用情況
- 9.2.1 占用內存情況查看
- 9.2.2 GODEBUG與gctrace
- 9.2.3 runtime.ReadMemStats
- 9.2.4 pprof工具
- 9.3 如何獲取Go語言程序的CPU性能情況
- 9.3.1 通過Web界面查看且得到profile文件
- 9.3.2 使用pprof工具獲取信息
- 9.3.3 profile文件獲取信息
- 9.3.4 可視化圖形查看及分析
- 9.4 小結
- 第10章 make和new的原理性區別
- 10.1 變量的聲明
- 10.2 Go語言中make與new的區別
- 10.2.1 new
- 10.2.2 make
- 10.2.3 make與new的異同
- 10.3 slice與new關鍵字
- 10.4 小結
- 第11章 精通Go Modules項目依賴管理
- 11.1 GOPATH的工作模式
- 11.1.1 什么是GOPATH
- 11.1.2 GOPATH模式的弊端
- 11.2 Go Modules模式
- 11.2.1 go mod命令
- 11.2.2 go mod環境變量
- 11.2.3 GO111MODULE
- 11.2.4 GOPROXY
- 11.2.5 direct
- 11.2.6 GOSUMDB
- 11.2.7 GONOPROXY/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.2 ACID理論
- 12.3 CAP理論
- 12.3.1 一致性
- 12.3.2 可用性
- 12.3.3 分區容錯性
- 12.4 CAP的“3選2”證明
- 12.4.1 基本場景
- 12.4.2 CAP特性
- 12.4.3 分布式系統正常運行流程
- 12.4.4 分布式系統異常運行流程
- 12.4.5 “3選2”的必然性
- 12.5 分布式BASE理論
- 12.6 小結
- 第三篇 Go語言框架設計之路
- 第13章 Zinx框架基礎服務構建
- 13.1 初探Zinx架構
- 13.2 Zinx-V0.1基礎服務
- 13.2.1 Zinx-V0.1代碼實現
- 13.2.2 Zinx框架單元測試樣例
- 13.2.3 使用Zinx-V0.1完成應用程序
- 13.3 Zinx-V0.2簡單的連接封裝與業務綁定
- 13.3.1 Zinx-V0.2代碼實現
- 13.3.2 使用Zinx-V0.2完成應用程序
- 13.4 小結
- 第14章 Zinx框架路由模塊設計與實現
- 14.1 IRequest消息請求抽象類
- 14.1.1 創建抽象IRequest層
- 14.1.2 實現Request類
- 14.2 IRouter路由配置抽象類
- 14.2.1 創建抽象的IRouter層
- 14.2.2 實現Router類
- 14.3 Zinx-V0.3集成簡單路由功能
- 14.3.1 IServer增添路由添加功能
- 14.3.2 Server類增添Router成員
- 14.3.3 Connection類綁定一個Router成員
- 14.3.4 在Connection調用注冊的Router處理業務
- 14.4 Server傳遞Router參數Connection
- 14.5 使用Zinx-V0.3完成應用程序
- 14.5.1 測試基于Zinx完成的服務器端應用
- 14.5.2 啟動Server和Client
- 14.6 小結
- 第15章 Zinx全局配置
- 15.1 Zinx-V0.4增添全局配置代碼實現
- 15.2 使用Zinx-V0.4完成應用程序
- 15.3 小結
- 第16章 Zinx消息封裝模塊設計與實現
- 16.1 創建消息封裝類型
- 16.2 消息的封包與拆包
- 16.2.1 創建拆包封包抽象類
- 16.2.2 實現拆包封包類
- 16.2.3 測試拆包封包功能
- 16.3 Zinx-V0.5代碼實現
- 16.3.1 Request字段修改
- 16.3.2 集成拆包過程
- 16.3.3 提供封包的發送方法
- 16.3.4 使用Zinx-V0.5完成應用程序
- 16.4 小結
- 第17章 Zinx多路由模式設計與實現
- 17.1 創建消息管理模塊
- 17.1.1 創建消息管理模塊抽象類
- 17.1.2 實現消息管理模塊
- 17.2 Zinx-V0.6代碼實現
- 17.3 使用Zinx-V0.6完成應用程序
- 17.4 小結
- 第18章 Zinx讀寫分離模型構建
- 18.1 Zinx-V0.7代碼實現
- 18.2 小結
- 第19章 Zinx消息隊列和任務工作池設計與實現
- 19.1 創建消息隊列
- 19.2 創建及啟動Worker工作池
- 19.3 將消息發送給消息隊列
- 19.4 Zinx-V0.8代碼實現
- 19.5 使用Zinx-V0.8完成應用程序
- 19.6 小結
- 第20章 Zinx連接管理及屬性設置
- 20.1 連接管理
- 20.1.1 創建連接管理模塊
- 20.1.2 將連接管理模塊集成到Zinx中
- 20.1.3 連接的帶緩沖的發包方法
- 20.1.4 注冊連接啟動/停止自定義Hook方法功能
- 20.1.5 使用Zinx-V0.9完成應用程序
- 20.2 Zinx的連接屬性設置
- 20.2.1 給連接添加連接配置接口
- 20.2.2 連接屬性方法實現
- 20.2.3 連接屬性Zinx-V0.10單元測試
- 20.3 小結
- 第21章 基于Zinx框架的應用項目案例
- 21.1 應用案例介紹
- 21.2 MMO多人在線游戲AOI算法
- 21.2.1 網絡法實現AOI算法
- 21.2.2 實現AOI格子結構
- 21.2.3 實現AOI管理模塊
- 21.2.4 求出九宮格
- 21.2.5 AOI管理區域格子添加刪除操作
- 21.2.6 AOI模塊單元測試
- 21.3 數據傳輸協議Protocol Buffer
- 21.3.1 Protocol Buffer簡介
- 21.3.2 數據交換格式
- 21.3.3 ProtoBuf環境安裝
- 21.3.4 ProtoBuf語法
- 21.3.5 編譯ProtoBuf
- 21.3.6 基于ProtoBuf協議的Go語言編程
- 21.4 MMO游戲服務器應用協議
- 21.4.1 協議定義
- 21.4.2 Proto3協議定義
- 21.5 構建項目與用戶上線
- 21.5.1 構建項目
- 21.5.2 用戶上線流程
- 21.6 世界聊天系統實現
- 21.6.1 世界管理模塊
- 21.6.2 世界聊天系統實現
- 21.7 上線位置信息同步
- 21.8 移動位置與未跨越格子的AOI廣播
- 21.9 玩家下線
- 21.10 移動與跨越格子的AOI廣播
- 21.11 小結
- 圖書推薦 更新時間:2025-04-16 04:48:46