10 2022 档案
摘要:一、关于 Go GC 优化的手段 设置 GOGC / debug.SetGCPercent() 这两种方式的原理和效果都是一样的,GOGC 默认值是 100,也就是下次 GC 触发的 heap 的大小是这次 GC 之后的 heap 的一倍。GO 的 GC 是标记-清除方式,当 GC 会触发时全量遍历
阅读全文
摘要:一、sync.Cond 的使用场景 一句话总结:sync.Cond 条件变量用来协调想要访问共享资源的 那些 goroutine,当共享资源的状态发生变化的时候,它可以用来通知被互斥锁阻塞的 goroutine。 1、sync.Cond 基于互斥锁/读写锁,它和互斥锁的区别是什么呢? 互斥锁 syn
阅读全文
摘要:一、堆内存与栈内存 堆(Heap):一般来讲是人为手动进行管理,手动申请、分配、释放。堆适合不可预知大小的内存分配,这也意味着为此付出的代价是分配速度较慢,而且会形成内存碎片。 栈(Stack):由编译器进行管理,自动申请、分配、释放。一般不会太大,因此栈的分配和回收速度非常快;我们常见的函数参数(
阅读全文
摘要:一、现状 在Go语言中,goroutine的创建成本很低,调度效率高,Go语言在设计时就是按以数万个goroutine为规范进行设计的,数十万个并不意外,但是goroutine在内存占用方面确实具有有限的成本,你不能创造无限数量的它们,比如这个例子: ch := generate() go func
阅读全文
摘要:垃圾回收历史进程 一、为什么选择标记清除 1、判断对象存活的思路 在 GC 领域里,判断对象存活的主流思路是两个,「引用计数」和「可达性分析」。 2、引用计数 顾名思义,引用计数的思路就是给每个对象进行计数,每被其它对象引用一次,计数就 +1,引用失效后,计数就 -1。当计数器的数值为 0,就意味着
阅读全文
摘要:一 、介绍 Pod是kubernetes的最⼩管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类: 自主式pod:kubernetes直接创建出来的Pod,这种pod删除后就没有了,也不会重建 控制器创建的pod:kubernetes通过控制器创建的pod,这种pod删除了之后
阅读全文
摘要:一、gRPC介绍 gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特性。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。 gRPC有四种服务方法: Unary RPCs,一元RPC。客户端发送一个请求到服务端,服务端响应一个请求。 r
阅读全文
摘要:一、概述 当切片的容量不足时,我们会调用 runtime.growslice 函数为切片扩容,扩容是为切片分配新的内存空间并拷贝原切片中元素的过程,我们先来看新切片的容量是如何确定的,使用的是 growslice 函数 func growslice(et *_type, old slice, cap
阅读全文