有一套流传很广的 Go 进阶内容《深入Go底层原理,重写Redis中间件实战》,它的路线是把两件事串起来:先吃透 Go 的运行时和并发原语,再用这些知识从零写一个 Redis 中间件。这里把它的知识结构和目录整理出来,当作自己的学习清单。
%
![图片[1]-从运行时到手写 Redis:一套 Go 底层原理的学习路径-星海夜航](https://i.imgtg.com/2023/01/14/QneVb.jpg)
%
语言与运行时:第 1~10 章
前面十章解决的是”Go 为什么快、为什么这么设计”:
- 环境搭建与快速入门,程序如何编译、如何运行,什么是 Runtime,企业级项目包管理;
- 高并发下的数据结构:什么变量大小是 0 字节,数组/字符串/切片的底层结构,map 为什么会扩容、并发问题怎么解决,接口隐式与显式实现之争,nil、空接口、空结构体的区别,内存对齐如何优化效率;
- Goroutine 协程:为什么要有协程,G-M-P 调度模型,抢占式调度解决了什么,协程太多的问题;
- 锁:锁的基础、互斥锁如何工作、锁饥饿、读写锁、WaitGroup、只执行一次的代码、锁异常排查;
- Channel:为什么要用 Channel 而不是共享内存,高性能 Channel 的设计,发送与接收的底层原理,非阻塞 Channel;
- 网络编程:非阻塞 IO,Go 如何抽象 Epoll 和 Socket,NetworkPoller 如何工作,阻塞模型与多路复用如何结合;
- 内存模型与 GC:为什么 Go 的栈在堆上,协程栈扩容,堆内存结构与分配,什么样的对象需要回收,如何减小 GC 影响;
- 高级特性:Go 调用 C 代码、defer 的底层原理、recover 如何在 panic 中拯救程序、反射的实现与实战。
实战部分:第 11~15 章,用 Go 重写 Redis
后五章是这套内容的核心价值——把前面的原理全部落地:
- 第 11 章:实现 TCP 服务器,从最简版本到完善版本,写 EchoHandler 并测试;
- 第 12 章:实现 Redis 网络协议(RESP)解析器,包括 constreply、errorreply、自定义 reply、ParseStream、ReadLine、ParseMultiBulkHeader、ParseSingleLine、readBody、Connection、RespHandler;
- 第 13 章:内存数据库,定义 Dict 接口、实现 SyncDict、command 结构体、DB.Exec,以及 PING、KEYS、STRING 命令集;
- 第 14 章:持久化,实现 AddAof、HandleAof、Aof 落盘与 Aof 恢复;
- 第 15 章:集群,一致性哈希原理与实现、NodeMap、连接工厂与连接池、三种执行模式、ClusterDatabase。
%
![图片[2]-从运行时到手写 Redis:一套 Go 底层原理的学习路径-星海夜航](https://i.imgtg.com/2023/01/14/QnKrg.jpg)
%
%
![图片[3]-从运行时到手写 Redis:一套 Go 底层原理的学习路径-星海夜航](https://i.imgtg.com/2023/01/14/QnAol.jpg)
%
几点观察
这条路线的设计意图很明显:原理章节里每个”为什么”,都会在实战章节里变成”用得上”。比如不搞定 map 的并发问题和锁,就写不好 SyncDict;不理解 Epoll 抽象和非阻塞 IO,就写不好 TCP 服务器和连接池;一致性哈希则是集群章节的入场券。
如果只想学语法,这套内容不合适;如果目标是看懂中间件的骨架并能自己造一个简化版,按章节顺序走一遍是合理的安排。完整目录(含课件与面试题)大致如下:
%
![图片[4]-从运行时到手写 Redis:一套 Go 底层原理的学习路径-星海夜航](https://i.imgtg.com/2023/01/14/QnZQB.jpg)
%
- 第 1 章 课程导学与学习指南 / 第 2 章 开发环境搭建与快速入门 / 第 3 章 重新认识 Go 语言;
- 第 4 章 高并发下的数据结构 / 第 5 章 Goroutine 协程 / 第 6 章 高并发下的锁 / 第 7 章 Channel 管道;
- 第 8 章 TCP 网络编程 / 第 9 章 内存模型与垃圾回收 / 第 10 章 其他高级特性;
- 第 11 章 实现 TCP 服务器 / 第 12 章 实现 Redis 协议解析器 / 第 13 章 实现内存数据库 / 第 14 章 实现 Redis 持久化 / 第 15 章 实现 Redis 集群 / 第 16 章 回顾与总结。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END


















暂无评论内容