go内存管理与GC原理
最近在把一些旧的cpp服务重构成go服务,因为cpp是一个没有gc的语言,所以每个用到指针或者手动申请内存的地方都得很小心,时时刻刻要记得释放,写go之后发现,极大的降低了我开发的心智,解放了我的生产力。本着严谨的态度,决定一探究竟golang的内存管理和GC,看看这里面究竟有没有坑。
最近在把一些旧的cpp服务重构成go服务,因为cpp是一个没有gc的语言,所以每个用到指针或者手动申请内存的地方都得很小心,时时刻刻要记得释放,写go之后发现,极大的降低了我开发的心智,解放了我的生产力。本着严谨的态度,决定一探究竟golang的内存管理和GC,看看这里面究竟有没有坑。
golang 核心开发人员,goroutine 调度的设计者 Dmitry Vyukov,在 2019 的一个 公开演讲《Go scheduler: Implementing language with lightweight concurrency》里面里阐述了 goroutine 调度的设计思想以及一些优化的细节。(youtube地址:https://www.youtube.com/watch?v=-K11rY57K7k) , 本文是笔者结合自身经验和认知的一点观后感,采用从零开始层层递进的方法,总结剖析了其背后的软件设计思想,希望能够帮助大家更好的了解GMP的演进和设计思路。
经常听到docker是一个使用了Linux Namespace 和Cgroups的虚拟化工具,本文章将探究什么是Namespace和Cgroups,以及容器是如何使用他们的。此博客适合,有一定go语言基础,对docker还没入门的新手阅读,此博客所有代码都经过了验证,可放心复制运行。