Kitex前传:RPC框架那些你不得不知的故事
Kitex前传:RPC框架那些你不得不知的故事
状态
已完稿✅
编辑时间
2022.06.20
定稿审校
完成✅
审核时间
2022.07.08
审核人
  1. 为什么选择 Go 来编写 RPC 框架
  1. 简洁的语法
Go 的语言实现十分的简洁,但简洁而不简陋。它没有和 Java 一样因为遵循 面向对象 而导致的臃肿语法,也没有像 Python 一样只通过缩进来约束的代码结构。go fmt 格式化工具会在一些 Go 语言的开发环境或者编辑器在保存时,将代码的格式化,这样就保证了不同开发者提交的代码都是为统一的格式。
虽然 Go 在有一些地方仍需要完善,但简洁易懂的语法和 go fmt 格式化工具等无疑是降低了使用者的心智负担
  1. 并发编程
和 Java 等传统的语言实现的多进程不同,Go 的执行并发单元是一种被称为 goroutine 的协程,goroutine 可以理解为官方实现的超级 "线程池",每个实例的栈内存仅为 4~5KB 和 由于实现机制而大幅减少的创建和销毁开销是Go高并发的根本原因。在同一台机器上可以启动成千上万个协程。
如若搭配 Go 独有的 channel 实现 CSP 模型,将并发单元间的数据耦合拆解开来,各司其职,这对所有纠结于内存共享、锁粒度的开发人员都是一个可期盼的解脱。可以说 高并发 是 Go 语言的最大亮点。
  1. 垃圾回收 (GC)
Go 实现了 GC 机制,使得Go 开发人员无需和C/C++一样考虑内存崩溃等问题, 降低使用者的 心智负担, 相比 Java,Go 面临的困难要更多。因指针的存在,所以回收内存不能做收缩处理。幸好,指针运算被阻止,否则要做到精确回收都十分困难。
每次升级,垃圾回收器必然是核心组件里往往修改最多的部分。从并发清理,到降低 STW 时间,直到 Go 的 1.5 版本实现并发标记,逐步引入三色标记和写屏障等等,都是为了能让垃圾回收在不影响用户逻辑的情况下更好地工作。
总结一下,垃圾回收 是使 Go 易用的一大优点,但它仍然努力优化争取做得更好。