注冊(cè) | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁(yè)出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)人工智能深入理解Go語(yǔ)言

深入理解Go語(yǔ)言

深入理解Go語(yǔ)言

定 價(jià):¥119.00

作 者: 劉丹冰
出版社: 清華大學(xué)出版社
叢編項(xiàng): 計(jì)算機(jī)技術(shù)開發(fā)與應(yīng)用叢書
標(biāo) 簽: 暫缺

ISBN: 9787302613664 出版時(shí)間: 2023-04-01 包裝: 平裝
開本: 16開 頁(yè)數(shù): 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  本書為深入理解學(xué)習(xí)Go語(yǔ)言必經(jīng)之路中的重點(diǎn)知識(shí)領(lǐng)域,采用大量精美詳細(xì)的圖文介紹,文章講解深入淺出,極大降低了理解Golang底層精髓的學(xué)習(xí)門檻。 本書包含3篇:第一篇為深度理論篇(第1章~第4章),包含深入理解Golang中GPM模型、深入理解Golang垃圾回收GC三色標(biāo)記與混合寫屏障、深入理解Golang內(nèi)存管理模型、網(wǎng)絡(luò)IO復(fù)用模型等。第二篇為Golang實(shí)戰(zhàn)中需要進(jìn)階的知識(shí)盲區(qū)介紹(第5章~第12章)。第三篇為基于Golang從0到1的實(shí)現(xiàn)輕量級(jí)網(wǎng)絡(luò)服務(wù)框架Zinx及相關(guān)應(yīng)用案例。 本書主要的面向讀者是已經(jīng)具有軟件編程開發(fā)經(jīng)驗(yàn)的工程師、系統(tǒng)開發(fā)工程師、期望由Python、PHP、C/C++、Ruby、Java等編程語(yǔ)言轉(zhuǎn)職到Golang開發(fā)的后端工程師、期望深入理解Go語(yǔ)言特性的計(jì)算機(jī)軟件學(xué)者等。

作者簡(jiǎn)介

  劉丹冰(Aceld),Zinx(Golang輕量級(jí)TCP服務(wù)器開源框架)作者,現(xiàn)就職于好未來(lái)集團(tuán),擔(dān)任Golang架構(gòu)師、服務(wù)器端專家。擁有多年互聯(lián)網(wǎng)、網(wǎng)絡(luò)安全、智能家居領(lǐng)域及分布式云服務(wù)研發(fā)經(jīng)驗(yàn)。曾就職于啟明星辰,從事網(wǎng)絡(luò)安全I(xiàn)DS(Intrusion Detection System,入侵檢測(cè)系統(tǒng))、IPS(IntrusionPreventionSystem,入侵防御系統(tǒng))等研發(fā)工作。參與過(guò)國(guó)家互聯(lián)網(wǎng)應(yīng)急中心關(guān)口監(jiān)測(cè)系統(tǒng)研發(fā),并且擔(dān)任重要崗位。曾任Haier U+ SmartHome智能家居、智能電視服務(wù)研發(fā)工程師;傳智教育科技C/C++、Golang項(xiàng)目研究員,參與并創(chuàng)作過(guò)多部C/C++、Golang研發(fā)課程及項(xiàng)目;Golang、C/C++業(yè)務(wù)線教學(xué)科研負(fù)責(zé)人。

圖書目錄

第一篇Go語(yǔ)言修煉必經(jīng)之路



第1章深入理解Go語(yǔ)言協(xié)程調(diào)度器GPM模型


1.1Go語(yǔ)言“調(diào)度器”的由來(lái)


1.1.1單進(jìn)程時(shí)代不需要調(diào)度器


1.1.2多進(jìn)程/多線程時(shí)代的調(diào)度器需求


1.1.3協(xié)程提高CPU的利用率


1.1.4Go語(yǔ)言的協(xié)程Goroutine


1.1.5被廢棄的Goroutine調(diào)度器


1.2Go語(yǔ)言調(diào)度器GPM模型的設(shè)計(jì)思想


1.2.1GPM模型


1.2.2調(diào)度器的設(shè)計(jì)策略


1.2.3go func() 調(diào)度流程


1.2.4調(diào)度器的生命周期


1.2.5可視化GPM編程


1.3Go調(diào)度器調(diào)度場(chǎng)景過(guò)程全解析


1.3.1場(chǎng)景1: G1創(chuàng)建G2


1.3.2場(chǎng)景2: G1執(zhí)行完畢


1.3.3場(chǎng)景3: G2開辟過(guò)多的G


1.3.4場(chǎng)景4: G2本地滿再創(chuàng)建G7


1.3.5場(chǎng)景5: G2本地未滿再創(chuàng)建G8


1.3.6場(chǎng)景6: 喚醒正在休眠的M


1.3.7場(chǎng)景7: 被喚醒的M2從全局隊(duì)列批量取G


1.3.8場(chǎng)景8: M2從M1中偷取


1.3.9場(chǎng)景9: 自旋線程的最大限制


1.3.10場(chǎng)景10: G發(fā)生阻塞的系統(tǒng)調(diào)用


1.3.11場(chǎng)景11: G發(fā)生非阻塞的系統(tǒng)調(diào)用


1.4小結(jié)


第2章Go語(yǔ)言混合寫屏障的GC全場(chǎng)景分析


2.1Go V1.3標(biāo)記清除算法


2.1.1標(biāo)記清除(Mark and Sweep)算法的詳細(xì)過(guò)程


2.1.2標(biāo)記清除算法的缺點(diǎn)


2.2Go V1.5的三色標(biāo)記法


2.2.1三色標(biāo)記法的過(guò)程


2.2.2沒(méi)有STW的三色標(biāo)記法


2.2.3觸發(fā)三色標(biāo)記法不安全的必要條件


2.3Go V1.5 的屏障機(jī)制


2.3.1“強(qiáng)弱”三色不變式


2.3.2插入屏障


2.3.3刪除屏障


2.4Go V1.8的混合寫屏障


2.4.1混合寫屏障(Hybrid Write Barrier)規(guī)則


2.4.2場(chǎng)景1: 堆刪除引用,成為棧下游


2.4.3場(chǎng)景2: 棧刪除引用,成為棧下游


2.4.4場(chǎng)景3: 堆刪除引用,成為堆下游


2.4.5場(chǎng)景4: 棧刪除引用,成為堆下游


2.5小結(jié)


第3章Go語(yǔ)言內(nèi)存管理洗髓經(jīng)


3.1何為內(nèi)存


3.2內(nèi)存為什么需要管理


3.3操作系統(tǒng)是如何管理內(nèi)存的


3.3.1虛擬內(nèi)存


3.3.2MMU內(nèi)存管理單元


3.3.3虛擬內(nèi)存本身怎么存放


3.3.4CPU內(nèi)存訪問(wèn)過(guò)程


3.3.5內(nèi)存的局部性


3.4如何用Go語(yǔ)言實(shí)現(xiàn)內(nèi)存管理和內(nèi)存池設(shè)計(jì)


3.4.1基于Cgo的內(nèi)存C接口封裝


3.4.2基礎(chǔ)內(nèi)存緩沖Buf實(shí)現(xiàn)


3.4.3內(nèi)存池設(shè)計(jì)與實(shí)現(xiàn)


3.4.4內(nèi)存池的功能單元測(cè)試


3.4.5內(nèi)存管理應(yīng)用接口


3.5Go語(yǔ)言內(nèi)存管理之魂TCMalloc


3.5.1TCMalloc


3.5.2TCMalloc模型相關(guān)基礎(chǔ)結(jié)構(gòu)


3.5.3ThreadCache


3.5.4CentralCache


3.5.5PageHeap


3.5.6TCMalloc的小對(duì)象分配


3.5.7TCMalloc的中對(duì)象分配


3.5.8TCMalloc的大對(duì)象分配


3.6Go語(yǔ)言堆內(nèi)存管理


3.6.1Go語(yǔ)言內(nèi)存模型層級(jí)結(jié)構(gòu)


3.6.2Go語(yǔ)言內(nèi)存管理單元相關(guān)概念


3.6.3MCache


3.6.4MCentral


3.6.5MHeap


3.6.6Tiny對(duì)象分配流程


3.6.7小對(duì)象分配流程


3.6.8大對(duì)象分配流程


3.7小結(jié)


第4章深入理解Linux網(wǎng)絡(luò)I/O復(fù)用并發(fā)模型


4.1網(wǎng)絡(luò)并發(fā)模型中的幾個(gè)基本概念


4.1.1流


4.1.2I/O操作


4.1.3阻塞等待


4.1.4非阻塞忙輪詢


4.1.5阻塞與非阻塞對(duì)比


4.2解決阻塞等待缺點(diǎn)的辦法


4.2.1阻塞死等待的缺點(diǎn)


4.2.2解決阻塞等待的辦法1: 多線程/多進(jìn)程


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簡(jiǎn)單的epoll服務(wù)器


4.5.1服務(wù)器端實(shí)現(xiàn)


4.5.2客戶端實(shí)現(xiàn)


4.6Linux下常見的網(wǎng)絡(luò)I/O復(fù)用并發(fā)模型


4.6.1模型1: 單線程Accept(無(wú)I/O復(fù)用)


4.6.2模型2: 單線程Accept+多線程讀寫業(yè)務(wù)(無(wú)I/O復(fù)用)


4.6.3模型3: 單線程多路I/O復(fù)用


4.6.4模型4: 單線程多路I/O復(fù)用+多線程讀寫業(yè)務(wù)(業(yè)務(wù)工作池)


4.6.5模型5: 單線程I/O復(fù)用+多線程I/O復(fù)用(連接線程池)


4.6.6模型5(進(jìn)程版): 單進(jìn)程多路I/O復(fù)用+多進(jìn)程I/O復(fù)用


4.6.7模型6: 單線程多路I/O復(fù)用+多線程I/O復(fù)用+多線程


4.7小結(jié)


第二篇Go語(yǔ)言編程進(jìn)階之路



第5章有關(guān)Goroutine無(wú)限創(chuàng)建的分析


5.1從操作系統(tǒng)分析進(jìn)程、線程、協(xié)程的區(qū)別


5.1.1進(jìn)程內(nèi)存


5.1.2線程內(nèi)存


5.1.3執(zhí)行單元


5.2協(xié)程的切換成本


5.2.1協(xié)程切換成本


5.2.2線程切換成本


5.2.3內(nèi)存占用


5.3Go是否可以無(wú)限創(chuàng)建,如何限定數(shù)量


5.3.1不控制Goroutine數(shù)量引發(fā)的問(wèn)題


5.3.2一些簡(jiǎn)單方法控制Goroutine的數(shù)量


5.4動(dòng)態(tài)?;頦orker工作池設(shè)計(jì)


5.4.1如何確定一個(gè)Goroutine已經(jīng)死亡


5.4.2Worker工作池的設(shè)計(jì)


5.4.3測(cè)試Worker工作池


5.5小結(jié)


第6章Go語(yǔ)言中的逃逸現(xiàn)象,變量“何時(shí)在棧、何時(shí)在堆”


6.1Go語(yǔ)言中的逃逸現(xiàn)象


6.1.1Go語(yǔ)言中訪問(wèn)子函數(shù)的局部變量


6.1.2C/C++中訪問(wèn)子函數(shù)的局部變量


6.2逃逸分析過(guò)程示例


6.2.1示例過(guò)程


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小結(jié)


第7章interface剖析與Go語(yǔ)言中面向?qū)ο笏枷?/p>


7.1interface的賦值問(wèn)題


7.2非空接口的interface內(nèi)部構(gòu)造


7.2.1案例分析


7.2.2空接口eface


7.2.3非空接口iface


7.3空接口的interface內(nèi)部構(gòu)造


7.4interface{}與*interface{}


7.5面向?qū)ο笏季S理解interface


7.5.1平鋪式的模塊設(shè)計(jì)


7.5.2面向?qū)ο笾械拈_閉原則


7.5.3接口的意義


7.5.4耦合度極高的模塊關(guān)系設(shè)計(jì)


7.5.5面向抽象層依賴倒轉(zhuǎn)設(shè)計(jì)


7.6小結(jié)


第8章defer踐行中必備的要領(lǐng)


8.1defer的執(zhí)行順序


8.2defer與return誰(shuí)先誰(shuí)后


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小結(jié)


第9章Go語(yǔ)言中常用的問(wèn)題及性能調(diào)試實(shí)踐方法


9.1如何分析程序的運(yùn)行時(shí)間與CPU利用率


9.1.1shell內(nèi)置time指令


9.1.2/usr/bin/time指令


9.2如何分析Go語(yǔ)言程序的內(nèi)存使用情況


9.2.1占用內(nèi)存情況查看


9.2.2GODEBUG與gctrace


9.2.3runtime.ReadMemStats


9.2.4pprof工具


9.3如何獲取Go語(yǔ)言程序的CPU性能情況


9.3.1通過(guò)Web界面查看且得到profile文件


9.3.2使用pprof工具獲取信息


9.3.3profile文件獲取信息


9.3.4可視化圖形查看及分析


9.4小結(jié)


第10章make和new的原理性區(qū)別


10.1變量的聲明


10.2Go語(yǔ)言中make與new的區(qū)別


10.2.1new


10.2.2make


10.2.3make與new的異同


10.3slice與new關(guān)鍵字


10.4小結(jié)


第11章精通Go Modules項(xiàng)目依賴管理


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初始化項(xiàng)目


11.3.1開啟Go Modules


11.3.2初始化項(xiàng)目


11.3.3查看go.mod文件


11.3.4查看go.sum文件


11.4修改模塊的版本依賴關(guān)系


11.5小結(jié)


第12章ACID、CAP、BASE的分布式理論推進(jìn)


12.1從本地事務(wù)到分布式理論


12.2ACID理論


12.3CAP理論


12.3.1一致性


12.3.2可用性


12.3.3分區(qū)容錯(cuò)性


12.4CAP的“3選2”證明


12.4.1基本場(chǎng)景


12.4.2CAP特性


12.4.3分布式系統(tǒng)正常運(yùn)行流程


12.4.4分布式系統(tǒng)異常運(yùn)行流程


12.4.5“3選2”的必然性


12.5分布式BASE理論


12.6小結(jié)


第三篇Go語(yǔ)言框架設(shè)計(jì)之路



第13章Zinx框架基礎(chǔ)服務(wù)構(gòu)建


13.1初探Zinx架構(gòu)


13.2ZinxV0.1基礎(chǔ)服務(wù)


13.2.1ZinxV0.1 代碼實(shí)現(xiàn)


13.2.2Zinx框架單元測(cè)試樣例


13.2.3使用ZinxV0.1完成應(yīng)用程序


13.3ZinxV0.2簡(jiǎn)單的連接封裝與業(yè)務(wù)綁定


13.3.1ZinxV0.2代碼實(shí)現(xiàn)


13.3.2使用ZinxV0.2完成應(yīng)用程序


13.4小結(jié)


第14章Zinx框架路由模塊設(shè)計(jì)與實(shí)現(xiàn)


14.1IRequest 消息請(qǐng)求抽象類


14.1.1創(chuàng)建抽象IRequest層


14.1.2實(shí)現(xiàn)Request類


14.2IRouter 路由配置抽象類


14.2.1創(chuàng)建抽象的IRouter層


14.2.2實(shí)現(xiàn)Router類


14.3ZinxV0.3集成簡(jiǎn)單路由功能


14.3.1IServer增添路由添加功能


14.3.2Server類增添Router成員


14.3.3Connection類綁定一個(gè)Router成員


14.3.4在Connection調(diào)用注冊(cè)的Router處理業(yè)務(wù)


14.4Server傳遞Router參數(shù)Connection


14.5使用ZinxV0.3完成應(yīng)用程序


14.5.1測(cè)試基于Zinx完成的服務(wù)器端應(yīng)用


14.5.2啟動(dòng)Server和Client


14.6小結(jié)


第15章Zinx全局配置


15.1ZinxV0.4增添全局配置代碼實(shí)現(xiàn)


15.2使用ZinxV0.4完成應(yīng)用程序


15.3小結(jié)


第16章Zinx消息封裝模塊設(shè)計(jì)與實(shí)現(xiàn)


16.1創(chuàng)建消息封裝類型


16.2消息的封包與拆包


16.2.1創(chuàng)建拆包封包抽象類


16.2.2實(shí)現(xiàn)拆包封包類


16.2.3測(cè)試拆包封包功能


16.3ZinxV0.5代碼實(shí)現(xiàn)


16.3.1Request字段修改


16.3.2集成拆包過(guò)程


16.3.3提供封包的發(fā)送方法


16.3.4使用ZinxV0.5完成應(yīng)用程序


16.4小結(jié)


本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) www.autoforsalebyowners.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)