更新时间:2024-09-11 17:36:33
封面
版权信息
内容简介
前言
第1章 为什么要了解Go底层
1.1 Go服务怎么出现502状态码了
1.1.1 服务超时为什么导致502状态码
1.1.2 基于context的超时控制
1.2 Go服务为什么没响应了
1.2.1 谁阻塞了协程
1.2.2 写管道可以不阻塞协程吗
1.3 Uber如何通过GC调优节约7万个内核
1.3.1 GC概述
1.3.2 Uber半自动化GC调优
1.4 Go语言进阶路线
1.4.1 Go语言快速入门
1.4.2 Go高并发编程
1.4.3 Go语言项目实战
1.5 本章小结
第2章 Go语言并发模型
2.1 GMP调度模型
2.1.1 Go语言并发编程入门
2.1.2 GMP调度模型概述
2.1.3 深入理解GMP调度模型
2.2 协程管理
2.2.1 基础补充
2.2.2 协程创建
2.2.3 协程切换
2.2.4 协程栈会溢出吗
2.2.5 协程退出
2.3 调度器
2.3.1 调度器实现原理
2.3.2 时间片调度
2.3.3 基于协作的抢占式调度
2.3.4 基于信号的抢占式调度
2.4 本章小结
第3章 调度器触发时机
3.1 网络I/O
3.1.1 探索Go语言网络I/O
3.1.2 Go语言网络I/O与调度器
3.1.3 如何实现网络读写超时
3.2 管道
3.2.1 管道的基本用法
3.2.2 管道与调度器
3.3 定时器
3.3.1 定时器的基本用法
3.3.2 定时器与调度器
3.4 系统调用
3.4.1 系统调用会阻塞线程吗
3.4.2 系统调用与调度器
3.5 本章小结
第4章 Go语言并发编程
4.1 什么是并发问题
4.2 CSP并发模型
4.2.1 基于管道-协程的CSP模型
4.2.2 管道与select关键字
4.2.3 如何实现无限缓存管道
4.3 基于锁的协程同步
4.3.1 乐观锁
4.3.2 悲观锁
4.4 如何并发操作map
4.4.1 map的并发问题
4.4.2 并发散列表sync.Map
4.5 并发控制sync.WaitGroup
4.6 并发对象池sync.Pool
4.7 如何实现单例模式
4.8 并发检测
4.9 本章小结
第5章 GC原理、调度与调优
5.1 内存管理
5.1.1 如何设计动态内存分配器
5.1.2 Go语言内存分配器
5.1.3 Go语言内存管理
5.1.4 内存逃逸
5.2 三色标记与写屏障
5.2.1 三色标记
5.2.2 写屏障
5.3 标记与清理
5.3.1 垃圾回收执行阶段
5.3.2 经典的stopTheWorld
5.3.3 辅助标记
5.3.4 内存清理
5.4 GC调度与GC调优
5.4.1 GC触发时机
5.4.2 GC协程调度模式
5.4.3 缓存框架bigcache中的GC调优
5.5 本章小结
第6章 手把手教你搭建Go项目
6.1 Go项目架构设计
6.1.1 分层架构
6.1.2 代码布局
6.1.3 命令管理cobra
6.1.4 配置管理Viper
6.2 Web框架Gin
6.2.1 RESTful API
6.2.2 引入Gin框架
6.2.3 中间件
6.2.4 如何记录访问日志
6.3 日志与全链路追踪
6.3.1 引入日志框架Zap