-
>
决战行测5000题(言语理解与表达)
-
>
软件性能测试.分析与调优实践之路
-
>
第一行代码Android
-
>
深度学习
-
>
Unreal Engine 4蓝图完全学习教程
-
>
深入理解计算机系统-原书第3版
-
>
Word/Excel PPT 2013办公应用从入门到精通-(附赠1DVD.含语音视频教学+办公模板+PDF电子书)
深入理解GO语言 版权信息
- ISBN:9787302613664
- 条形码:9787302613664 ; 978-7-302-61366-4
- 装帧:一般胶版纸
- 册数:暂无
- 重量:暂无
- 所属分类:>
深入理解GO语言 本书特色
系统讲解Go语言的GMP模型、垃圾回收、Goroutine等语言特性和实现原理,从实践的角度出发,系统讲解框架设计的方方面面,让读者通过一个实际的项目深入浅出地掌握Go语言看似简单,实则深奥的技术难点。本书的每个章节专题所描述的知识点和知识点之间具备流畅的衔接,遵循知识点吸收的三步法:“为什么这样?”“这样会如何?”“所以才这样。”的抽象编写架构。 深入讲解Go语言的原理及关键技术点,以图文的方式介绍 Go语言的设计思路,通俗易懂★Go语言越来越被广大开发者所关注和应用,开源中国Gitee本着开源理念,每年会为IT开发者收录很多优质的Go开源作品。《深入理解Go语言》书中的开源服务框架Zinx曾被开源中国Gitee于2019年评为年度*有价值开源项目。本书结构迭代递进,能够让读者循序渐进地学习完整的框架构建。 ——红薯 开源中国&Gitee创始人★《深入理解Go语言》是一本深入浅出理解整个Go语言内核设计思想和实现的一本高质量技术书,看完本书你会发现作者刘丹冰老师对整个Go语言的理解深度,特别适合有一定Go语言基础并且想深入了解Go语言运行机制的计算机从业者进行学习。读完本书相信Go语言从业者一定会对Go语言的内核机制了如指掌,对于其他爱好者也一定会有所收获。 ——谢华亮(黑夜路人) CSDN博客技术专家、好未来技术委员会服务通道主席 ★很早之前就在社区听过Zinx框架,该框架在高性能服务中有着优越的表现。这一次丹冰花大量时间写出来的这本关于Go语言框架设计和实现原理的书非常不容易,推荐给想深入了解TCP服务和设计的读者,对深入了解Go语言如何实现高性能服务框架有很大的帮助。 ——谢孟军 上海积梦智能科技有限公司CEO、GoCN社区负责人★《深入理解Go语言》系统讲解 Go 语言的GMP 模型、垃圾回收、Goroutine等语言特性和实现原理,并通过Zinx开源项目深入剖析 Go 语言的底层技术细节,从实践的角度出发,系统讲解框架设计的方方面面,让读者通过一个实际的项目深入浅出地掌握 Go 语言看似简单,实则深奥的技术难点,值得推荐! ——万俊峰(Kevin) go-zero作者 ★国内Go社区不断涌现出大量优秀的技术人员,刘丹冰就是其中一位。也许你对这个名字不熟悉,但不少人应该对电子书《Golang修养之路》熟悉。2020 年,Go语言中文网转载过他的几篇 Go 语言的文章,图文并茂,通俗易懂。《深入理解Go语言》与现有市面上进阶Go语言图书不同,本书更多地以图文的方式讲解 Go语言的设计思路,而不是在源码级别抠细节,更有利于大家学习与理解。此外,本书还讲解了如何从 0 到 1 构建TCP 框架Zinx,值得 Go语言爱好者拥有! ——徐新华(Polaris) Go语言中文网站长 ★Go语言作为新生代服务器端计算机编程语言,被越来越多企业的生产环境所应用。《深入理解Go语言》重点介绍Go语言学习过程中应重点掌握的知识,内容深入浅出,构建知识体系曲线递进。如果你具备一定编程基础并想了解Go语言的精髓,则本书毫无疑问是一个很好的选择。 ——Chris Tang 微软LinkedInContent Product ManagerLead ★本书开篇就介绍了 GPM 模型,后续也讲解了很多 Go 语言的理论精髓。虽然对于新手直接从开篇阅读比较难,但是如果你能够从后往前阅读,先实践再剖析语言理论,可能不失为一种很好的阅读本书的方法。 ——杨文 “Go夜读”创始人
深入理解GO语言 内容简介
本书为深入理解学习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语言特性的计算机软件学者等。
深入理解GO语言 目录
**篇Go语言修炼必经之路
第1章深入理解Go语言协程调度器GPM模型
1.1Go语言“调度器”的由来
1.1.1单进程时代不需要调度器
1.1.2多进程/多线程时代的调度器需求
1.1.3协程提高CPU的利用率
1.1.4Go语言的协程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创建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.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触发三色标记法不安全的必要条件
2.3Go V1.5 的屏障机制
2.3.1“强弱”三色不变式
2.3.2插入屏障
2.3.3删除屏障
2.4Go 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.2MMU内存管理单元
3.3.3虚拟内存本身怎么存放
3.3.4CPU内存访问过程
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.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复用并发模型
4.1网络并发模型中的几个基本概念
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的触发模式
4.4.1水平触发
4.4.2边缘触发
4.5简单的epoll服务器
4.5.1服务器端实现
4.5.2客户端实现
4.6Linux下常见的网络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.3Go是否可以无限创建,如何限定数量
5.3.1不控制Goroutine数量引发的问题
5.3.2一些简单方法控制Goroutine的数量
5.4动态保活Worker工作池设计
5.4.1如何确定一个Goroutine已经死亡
5.4.2Worker工作池的设计
5.4.3测试Worker工作池
5.5小结
第6章Go语言中的逃逸现象,变量“何时在栈、何时在堆”
6.1Go语言中的逃逸现象
6.1.1Go语言中访问子函数的局部变量
6.1.2C/C++中访问子函数的局部变量
6.2逃逸分析过程示例
6.2.1示例过程
6.2.2new的变量在栈还是堆
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.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的执行顺序
8.2defer与return谁先谁后
8.3函数返回值的初始化
8.4有名函数返回值遇见defer的情况
8.5defer遇见panic
8.5.1defer遇见panic,但是并不捕获异常的情况
8.5.2defer遇见panic,并捕获异常
8.6defer中包含panic
8.7defer下的函数参数包含子函数
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的原理性区别
10.1变量的声明
10.2Go语言中make与new的区别
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环境变量
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分区容错性
12.4CAP的“3选2”证明
12.4.1基本场景
12.4.2CAP特性
12.4.3分布式系统正常运行流程
12.4.4分布式系统异常运行流程
12.4.5“3选2”的必然性
12.5分布式BASE理论
12.6小结
第三篇Go语言框架设计之路
第13章Zinx框架基础服务构建
13.1初探Zinx架构
13.2ZinxV0.1基础服务
13.2.1ZinxV0.1 代码实现
13.2.2Zinx框架单元测试样例
13.2.3使用ZinxV0.1完成应用程序
13.3ZinxV0.2简单的连接封装与业务绑定
13.3.1ZinxV0.2代码实现
13.3.2使用ZinxV0.2完成应用程序
13.4小结
第14章Zinx框架路由模块设计与实现
14.1IRequest 消息请求抽象类
14.1.1创建抽象IRequest层
14.1.2实现Request类
14.2IRouter 路由配置抽象类
14.2.1创建抽象的IRouter层
14.2.2实现Router类
14.3ZinxV0.3集成简单路由功能
14.3.1IServer增添路由添加功能
14.3.2Server类增添Router成员
14.3.3Connection类绑定一个Router成员
14.3.4在Connection调用注册的Router处理业务
14.4Server传递Router参数Connection
14.5使用ZinxV0.3完成应用程序
14.5.1测试基于Zinx完成的服务器端应用
14.5.2启动Server和Client
14.6小结
第15章Zinx全局配置
15.1ZinxV0.4增添全局配置代码实现
15.2使用ZinxV0.4完成应用程序
15.3小结
第16章Zinx消息封装模块设计与实现
16.1创建消息封装类型
16.2消息的封包与拆包
16.2.1创建拆包封包抽象类
16.2.2实现拆包封包类
16.2.3测试拆包封包功能
16.3ZinxV0.5代码实现
16.3.1Request字段修改
16.3.2集成拆包过程
16.3.3提供封包的发送方法
16.3.4使用ZinxV0.5完成应用程序
16.4小结
深入理解GO语言 作者简介
刘丹冰(Aceld),Zinx(Golang轻量级TCP服务器开源框架)作者,现就职于好未来集团,担任Golang架构师、服务器端专家。拥有多年互联网、网络安全、智能家居领域及分布式云服务研发经验。曾就职于启明星辰,从事网络安全IDS(Intrusion Detection System,入侵检测系统)、IPS(IntrusionPreventionSystem,入侵防御系统)等研发工作。参与过国家互联网应急中心关口监测系统研发,并且担任重要岗位。曾任Haier U+ SmartHome智能家居、智能电视服务研发工程师;传智教育科技C/C++、Golang项目研究员,参与并创作过多部C/C++、Golang研发课程及项目;Golang、C/C++业务线教学科研负责人。
- >
月亮虎
月亮虎
¥20.2¥48.0 - >
名家带你读鲁迅:朝花夕拾
名家带你读鲁迅:朝花夕拾
¥10.5¥21.0 - >
名家带你读鲁迅:故事新编
名家带你读鲁迅:故事新编
¥13.0¥26.0 - >
经典常谈
经典常谈
¥16.3¥39.8 - >
罗庸西南联大授课录
罗庸西南联大授课录
¥13.8¥32.0 - >
姑妈的宝刀
姑妈的宝刀
¥9.0¥30.0 - >
月亮与六便士
月亮与六便士
¥15.1¥42.0 - >
中国人在乌苏里边疆区:历史与人类学概述
中国人在乌苏里边疆区:历史与人类学概述
¥20.6¥48.0
-
详解Spring Boot(从入门到企业级开发实战)/孙鑫精品图书系列
¥64.2¥129 -
PYTHON应用与实战
¥52.9¥79.8 -
Python编程与数值方法
¥79.6¥109 -
Go语言从入门到项目实战(视频版)
¥60.4¥108 -
软件设计师
¥14.2¥38 -
GO语言编程从入门到实践
¥75.6¥108