Keen的博客

记录所思、所想、所遇

欢迎来到我的个人站~


【架构设计】对Go的理解

1. Go语言优势和特点

1.1. 与Python对比

  • Go部署简单,整个编译生成一个静态的可执行文件,除了glibc外没有其他依赖,一个进程文件,也比较好做监控和服务发现等;Python需要维护各种库、包依赖关系,部署的时候相当麻烦,不同版本的源不兼容问题会导致需要私建镜像
  • Go并发性好,单个Go应用也能有效利用多个CPU核;Python的并发性是其本源劣势之一,脚本执行的全局所GIL导致Python的多线程无法有效利用多核,只能用多进程的方式,这样对进程的监控管理又有极大问题
  • Go的源码,相比Python更容易理解,没有Python那般灵活的语法特性,无类型的特性,代码管理也是编译器级别就支持的,比Python更规范

1.2. 与C/C++对比

  • Go的学习难度相比C/C++简单太多
  • Go的原生库就支持几乎开发用到的所有必要组件,包括http、json、rpc等,开发难度很低
  • Go原生语法级别支持的Goroutine使用协程,相比C/C++的线程,更容易使用,channel通信方式在多协程之间也是无锁的方式,相比C/C++的线程同步简单太多
  • Go天然支持GC,无需程序员管理内存,无需关心内存是堆还是栈,解决了C/C++最容易出错的点,程序相比而言更容易稳定
  • Go支持类型反射,使用Any类型(interface{})使得开发灵活性接近解析型语言
  • Go天然支持pprof、trace等性能分析工具,极方便的解决性能瓶颈;C/C++得通过第三方性能分析工具+pdb来一一分析

1.3. 与Java对比

  • Go在语言级别上,就支持高性能的http/tcp/udp的server,极容易编写的协程,极容易部署,天生适合后台服务
  • 相比Java小巧轻量,占用内存小
  • Go直接编译成机器码运行,而非Java利用虚拟机解释执行

2. Go的优势是如何实现的

2.1. 语法设计层面

  • 关键字少,控制在几个核心关键字内,去除了C++里面一些不重要的关键字
  • 语言设计层面强调并发编程,直接将协程作为语法层提供支持,go和channel
  • 标准库囊括了业务开发的几个必要的组件,http、rpc、json、net等
  • 编译器将代码的规范作为严格标准

2.2. rumtime

2.2.1. 协程调度机制

(1)线程模型:有哪些线程模型?各种系统下的实现?

Windows下实现的协程:https://keenjin.github.io/2019/08/win_coroutine/

(2)Go的线程模型:调度模型?

(3)各种模型的优势对比?Go的模型好处与坏处

2.2.2. 内存管理机制

2.2.3. GC机制

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少