摘要:
阅读全文
摘要:
Go 语言较之 C 语言一个很大的优势就是自带 GC 功能,可 GC 并不是没有代价的。写 C 语言的时候,在一个函数内声明的变量,在函数退出后会自动释放掉,因为这些变量分配在栈上。如果你想要变量的数据能在函数退出后还能访问,就需要调用 malloc 方法在堆上申请内存,如果程序不再需要这块内存了, 阅读全文
摘要:
编写 Go 代码不需要像写 C/C++ 那样手动的 malloc和 free内存,因为 malloc 操作由 Go 编译器的逃逸分析机制帮我们加上了,而 free 动作则是有 GC 机制来完成。 虽说 GC 是一个很好的特性,大大降低了编程门槛,但这是以损耗性能为代价的。Go 的 GC 机制是不断进 阅读全文
摘要:
介绍 了解操作系统对内存的管理机制后,现在可以去看下 Go 语言是如何利用底层的这些特性来优化内存的。Go 的内存管理基本上参考 tcmalloc 来实现的,只是细节上根据自身的需要做了一些小的优化调整。 Go 的内存是自动管理的,我们可以随意定义变量直接使用,不需要考虑变量背后的内存申请和释放的问 阅读全文
摘要:
介绍 要搞明白 Go 语言的内存管理,就必须先理解操作系统以及机器硬件是如何管理内存的。因为 Go 语言的内部机制是建立在这个基础之上的,它的设计,本质上就是尽可能的会发挥操作系统层面的优势,而避开导致低效情况。 一,操作系统内存管理 其实现在计算机内存管理的方式都是一步步演变来的,最开始是非常简单 阅读全文
摘要:
package main import ( "fmt" "time" ) // 基于channel编写一个简单的单线程生产者消费者模型 // 队列:队列长度10,队列元素类型为int // 生产者:每1秒往队列中放入一个类型为int的元素,队列满时生产者可以阻塞 // 消费者:每1秒从队列中获取一个 阅读全文
摘要:
package main import "fmt" func main(){ var arr = [5]string{"i","am","stupid","and","weak"} for i:=0;i<len(arr);i++{ if arr[i]=="stupid"{ arr[i]="smart 阅读全文
摘要:
一,文章简述 大家好,本篇是个人的第 2 篇文章。是关于在之前项目中,k8s 线上集群中 Node 节点状态变成 NotReady 状态,导致整个 Node 节点中容器停止服务后的问题排查。 文章中所描述的是本人在项目中线上环境实际解决的,那除了如何解决该问题,更重要的是如何去排查这个问题的起因。 阅读全文
摘要:
如果把pod看作是一台物理电脑的话,它也有开机,关机,运行,开机中,等阶段 对象在 Kubernetes 中的生命周期。 Pod 生命周期的变化,主要体现在 Pod API 对象的 Status 部分,这是它除了 Metadata 和 Spec 之外的第三个重要字段。 其中,pod.status.p 阅读全文
摘要:
Pod,而不是容器,才是 Kubernetes 项目中的最小编排单位。将这个设计落实到 API 对象上,容器(Container)就成了 Pod 属性里的一个普通的字段。 那么,一个很自然的问题就是:到底哪些属性属于 Pod 对象,而又有哪些属性属于 Container 呢?如果你能把 Pod 看成 阅读全文