- ISBN:9787111758266
- 装帧:平装-胶订
- 册数:暂无
- 重量:暂无
- 开本:16开
- 页数:310
- 出版时间:2024-07-01
- 条形码:9787111758266 ; 978-7-111-75826-6
本书特色
1)知名企业资深Go开发专家联合撰写,从原理到实践,助你掌握Go语言精髓,授你项目实战经验 2)深入剖析Go语言的核心原理,从0到1带你实现高性能高可用的Go服务开发,详细介绍10多个线上典型问题以及解决思路
内容简介
全书分为2篇:1.第1篇详细介绍Go语言高性能优势是如何实现的,包括经典的GMP调度模型,Go语言调度器的实现,垃圾回收,以及如何基于管道、锁等并发编程。2.第二篇主要是项目实战,手把手带领读者从0开始搭建高性能、高稳定的Go服务。以及在面对线上问题时,如何调试、分析、解决。通过学习本书,读者对Go语言的核心——高并发会有一个深刻的认识,具备一定的Go并发编程经验,能够独立完成高性能、高稳定Go服务的架构设计,并且能够基于一些工具进行Go线上问题分析与性能调优。
目录
前言
第1章 为什么要了解Go底层1
1.1 Go服务怎么出现502状态码了1
1.1.1 服务超时为什么导致502状态码1
1.1.2 基于context的超时控制4
1.2 Go服务为什么没响应了7
1.2.1 谁阻塞了协程7
1.2.2 写管道可以不阻塞协程吗10
1.3 Uber如何通过GC调优节约
7万个内核11
1.3.1 GC概述11
1.3.2 Uber半自动化GC调优13
1.4 Go语言进阶路线15
1.4.1 Go语言快速入门16
1.4.2 Go高并发编程20
1.4.3 Go语言项目实战22
1.5 本章小结24
第2章 Go语言并发模型25
2.1 GMP调度模型25
2.1.1 Go语言并发编程入门25
2.1.2 GMP调度模型概述27
2.1.3 深入理解GMP调度模型30
2.2 协程管理33
2.2.1 基础补充33
2.2.2 协程创建37
2.2.3 协程切换40
2.2.4 协程栈会溢出吗42
2.2.5 协程退出45
2.3 调度器46
2.3.1 调度器实现原理46
2.3.2 时间片调度49
2.3.3 基于协作的抢占式调度52
2.3.4 基于信号的抢占式调度53
2.4 本章小结54
第3章 调度器触发时机55
3.1 网络I/O56
3.1.1 探索Go语言网络I/O56
3.1.2 Go语言网络I/O与调度器59
3.1.3 如何实现网络读写超时62
3.2 管道65
3.2.1 管道的基本用法65
3.2.2 管道与调度器67
3.3 定时器70
3.3.1 定时器的基本用法70
3.3.2 定时器与调度器73
3.4 系统调用75
3.4.1 系统调用会阻塞线程吗75
3.4.2 系统调用与调度器77
3.5 本章小结79
第4章 Go语言并发编程80
4.1 什么是并发问题80
4.2 CSP并发模型84
4.2.1 基于管道-协程的CSP模型84
4.2.2 管道与select关键字86
4.2.3 如何实现无限缓存管道89
4.3 基于锁的协程同步91
4.3.1 乐观锁91
4.3.2 悲观锁93
4.4 如何并发操作map95
4.4.1 map的并发问题96
4.4.2 并发散列表sync.Map98
4.5 并发控制sync.WaitGroup101
4.6 并发对象池sync. Pool103
4.7 如何实现单例模式104
4.8 并发检测105
4.9 本章小结106
第5章 GC原理、调度与调优108
5.1 内存管理108
5.1.1 如何设计动态内存分配器108
5.1.2 Go语言内存分配器110
5.1.3 Go语言内存管理111
5.1.4 内存逃逸113
5.2 三色标记与写屏障114
5.2.1 三色标记115
5.2.2 写屏障117
5.3 标记与清理119
5.3.1 垃圾回收执行阶段120
5.3.2 经典的stopTheWorld123
5.3.3 辅助标记125
5.3.4 内存清理127
5.4 GC调度与GC调优128
5.4.1 GC触发时机128
5.4.2 GC协程调度模式131
5.4.3 缓存框架bigcache中的
GC调优133
5.5 本章小结135
第6章 手把手教你搭建Go项目136
6.1 Go项目架构设计 136
6.1.1 分层架构136
6.1.2 代码布局138
6.1.3 命令管理cobra140
6.1.4 配置管理Viper142
6.2 Web框架Gin145
6.2.1 RESTful API145
6.2.2 引入Gin框架146
6.2.3 中间件149
6.2.4 如何记录访问日志152
6.3 日志与全链路追踪154
6.3.1 引入日志框架Zap154
6.3.2 基于context的全链路追踪157
6.3.3 基于协程ID的全链路追踪159
6.4 访问数据库161
6.4.1 引入Gorm框架161
6.4.2 CURD165
6.4.3 事务170
6.4.4 如何记录Trace日志172
6.5 HTTP调用173
6.5.1 go-resty框架概述174
6.5.2 请求追踪176
6.5.3 长连接还是短连接178
6.5.4 如何记录Trace日志180
6.6 单元测试181
6.6.1 Go语言中的单元测试181
6.6.2 引入单元测试183
6.7 本章小结184
第7章 高性能Go服务开发186
7.1 分库分表186
7.1.1 分库分表基本原理186
7.1.2 基于Gorm的分表189
7.2 使用Redis缓存191
7.2.1 go-redis的基本操作191
7.2.2 基于Redis的性能优化193
7.3 使用本地缓存196
7.3.1 自己实现一个LRU缓存196
7.3.2 基于bigcache的性能优化198
7.4 资源复用200
7.4.1 协程复用之fasthttp200
7.4.2 连接复用之连接池203
7.4.3 对象复用之对象池205
7.5 其他207
7.5.1 异步化处理207
7.5.2 无锁编程209
7.6 本章小结210
第8章 高可用Go服务开发211
8.1 可用性定义与高可用三板斧 211
8.1.1 可用性定义211
8.1.2 高可用三板斧213
8.2 流量治理组件Sentinel215
8.2.1 Sentinel快速入门215
8.2.2 流量控制218
8.2.3 系统自适应流量控制220
8.2.4 熔断降级222
8.2.5 Sentinel原理浅析224
8.3 Go服务监控225
8
作者简介
作者简介
李乐:Golang开发专家,先后就职于滴滴出行、好未来,西安电子科技大学硕士,拥有多年互联网研发经验,合著有《Redis5设计与源码分析》。
陈雷:希望学产研负责人,清华大学本硕与北京邮电大学硕士,曾在百度、腾讯和滴滴等公司工作,拥有15年产品研发经验,合著有《PHP7底层设计与源码实现》。
-
有限与无限的游戏:一个哲学家眼中的竞技世界
¥37.4¥68.0 -
硅谷之火-人与计算机的未来
¥14.3¥39.8 -
全图解零基础word excel ppt 应用教程
¥12.0¥48.0 -
机器学习
¥59.4¥108.0 -
深度学习的数学
¥43.5¥69.0 -
智能硬件项目教程:基于ARDUINO(第2版)
¥37.7¥65.0 -
元启发式算法与背包问题研究
¥38.2¥49.0 -
AI虚拟数字人:商业模式+形象创建+视频直播+案例应用
¥62.9¥89.8 -
UNIX环境高级编程(第3版)
¥164.9¥229.0 -
剪映AI
¥52.8¥88.0 -
深度学习高手笔记 卷2:经典应用
¥90.9¥129.8 -
纹样之美:中国传统经典纹样速查手册
¥77.4¥109.0 -
UG NX 12.0数控编程
¥24.8¥45.0 -
MATLAB计算机视觉与深度学习实战(第2版)
¥90.9¥128.0 -
界面交互设计理论研究
¥30.8¥56.0 -
UN NX 12.0多轴数控编程案例教程
¥25.8¥38.0 -
微机组装与系统维护技术教程(第二版)
¥37.8¥43.0 -
Go 语言运维开发 : Kubernetes 项目实战
¥48.2¥79.0 -
明解C语言:实践篇
¥62.9¥89.8 -
Linux服务器架设实战(Linux典藏大系)
¥84.5¥119.0