Golang Map 查找
Go 语言中 map 采用的是哈希查找表,由一个 key 通过哈希函数得到哈希值,64 位系统中就生成一个 64bit 的哈希值,由这个哈希值将 key ...
Sysmon 有什么作用
Sysmon 也叫监控线程,变动的周期性检查,好处- 释放闲置超过 5 分钟的 span 物理内存;- 如果超过 2 分钟没有垃圾回收,强制执行; -...
基于信号的抢占式调度
在任何情况下,Go 运行时并行执行(注意,不是并发)的 goroutines 数量是 小于等于 P 的数量的。为了提高系统的性能,P 的数量肯定不是越小越...
协作式的抢占式调度
在 1.14 版本之前,程序只能依靠 Goroutine 主动让出 CPU 资源才能触发调 度。这种方式存在问题有:某些 Goroutine 可以长时间占...
GMP 中 hand off 机制
当本线程 M 因为 G 进行的系统调用阻塞时,线程释放绑定的 P,把 P 转移给其 他空闲的 M 执行。 细节:当发生上线文切换时,需要对执行现场进行保护...
GMP 中 work stealing 机制
获取 P 本地队列,当从绑定 P 本地 runq 上找不到可执行的 g,尝试从全局链 表中拿,再拿不到从 netpoll 和事件池里拿,最后会从别的 P ...
GMP 调度流程
每个 P 有个局部队列,局部队列保存待执行的goroutine(流程 2),当 M 绑定的 P 的的局部队列已经满了之后就会把 goroutine 放到全...
0 之前 GM 调度模型
调度器把 G 都分配到 M 上,不同的 G 在不同的 M 并发运行时,都需要向系统申 请资源,比如堆栈内存等,因为资源是全局的,就会因为资源竞争照成很多性...
GMP 指的是什么
G(Goroutine):我们所说的协程,为用户级的轻量级线程,每个 Goroutine 对象中的 sched 保存着其上下文信息。M(Machine):...
Goroutine 定义
Golang 在语言级别支持协程,称之为 Goroutine。Golang 标准库提供的所有 系统调用操作(包括所有的同步 I/O 操作),都会出让 CP...
sync.Pool 有什么用
对于很多需要重复分配、回收内存的地方,sync.Pool 是一个很好的选择。频 繁地分配、回收内存会给 GC 带来一定的负担,严重的时候会引起 CPU 的...
什么是 CAS
CAS 的全称为 Compare And Swap,直译就是比较交换。是一条 CPU 的原子指 令,其作用是让 CPU 先进行比较两个值是否相等,然后原子...
原子操作和锁的区别
原子操作由底层硬件支持,而锁则由操作系统的调度器实现。 锁应当用来保护一段逻辑,对于一个变量更新的保护。 原子操作通常执行上会更有效率,并且更能利用计算机...
什么操作叫做原子操作
原子操作即是进行过程中不能被中断的操作,针对某个值的原子操作在被进行 的过程中,CPU 绝不会再去进行其他的针对该值的操作。为了实现这样的严谨 性,原子操...
什么是 sync.Once
- Once 可以用来执行且仅仅执行一次动作,常常用于单例对象的初始化场 景。 - Once 常常用来初始化单例资源,或者并发访问只需初始化一次的共享...
WaitGroup 实现原理
WaitGroup 主要维护了 2 个计数器,一个是请求计数器 v,一个是等待计数 器 w,二者组成一个 64bit 的值,请求计数器占高 32bit,等...
WaitGroup 用法
一个 WaitGroup 对象可以等待一组协程结束。使用方法是:main 协程通过调用 wg.Add(delta int) 设置 worker 协程的个数...
Cond 中 Wait 使用
func (c *Cond) Wait() Wait()会自动释放 c.L 锁,并挂起调用者的 goroutine。之后恢复执行, Wait()会在返回时...
Broadcast 和 Signal 区别
func (c *Cond) Broadcast() Broadcast 会唤醒所有等待 c 的 goroutine。调用 Broadcast 的时候,可...
Cond 是什么
Cond 实现了一种条件变量,可以使用在多个 Reader 等待共享资源 ready 的场 景(如果只有一读一写,一个锁或者 channel 就搞定了)每...
RWMutex 注意事项
- RWMutex 是单写多读锁,该锁可以加多个读锁或者一个写锁 - 读锁占用的情况下会阻止写,不会阻止读,多个 Goroutine 可以同时获取 读...
Mutex 允许自旋的条件
锁已被占用,并且锁不处于饥饿模式。积累的自旋次数小于最大自旋次数(active_spin=4)。CPU 核数大于 1。有空闲的 P。当前 Goroutin...
Mutex 正常模式和饥饿模式
正常模式(非公平锁) 正常模式下,所有等待锁的 goroutine 按照 FIFO(先进先出)顺序等待。唤醒 的 goroutine 不会直接拥有锁,而是...
Mutex 几种状态
mutexLocked — 表示互斥锁的锁定状态;mutexWoken — 表示从正常模式被从唤醒;mutexStarving — 当前的互斥锁进入饥饿状...
Channel 的 ring buffer 实现
channel 中使用了 ring buffer(环形缓冲区) 来缓存写入的数据。ring buffer 有很多好处,而且非常适合用来实现 FIFO 式...
介绍一下 Channel
Go 语言中,不要通过共享内存来通信,而要通过通信来实现内存共享。Go 的 CSP(Communicating Sequential Process)并发...
Go里面一个协程能保证绑定在一个内核线程上面的。
题目来源:腾讯作者:斯鱼协程是用户级的线程,对内核是透明的,系统并不知道协程的存在,并且协程是非抢占式调度,无法实现公平的任务调用,通常只进行协作式调度,...
扩容过程中需不需要重新写入
题目来源:腾讯作者:斯鱼切片的扩容,当在尾部扩容时,追加元素,不需要重新写入;var a []int a = append(a, 1)在头部插入时;会引起...
c 与go的区别优劣
答案1:Go与C1、区别语言代码表面差异如源文件差异 C语言扩展名源类型.cC语言源文件.h头文件Go语言扩展名源文件.goGo语言源文件其他详细的语言代...
go map slice 实现(内存泄漏分析)
答案1:slice内存泄漏分析(1)发生场景:截取长slice中的一段导致长slice未释放 由于底层都是数组,如果截图长slice的一段,其实...
go waitgroup 的坑
答案1:1、waitGroup对象做值传递如: func main(){ var swg sync.WaitGroup for i:=0;...
与其他语言相比,使用 Go 有什么好处?
与其他作为学术实验开始的语言不同,Go 代码的设计是务实的。每个功能和语法决策都旨在让程序员的生活更轻松。Golang 针对并发进行了优化,并且在规模上运...
Golang 使用什么数据类型?
Golang 使用以下类型:MethodBoolStringArraySliceStructPointerFunctionInterfaceMapChannel
Go 程序中的包是什么?
包 (pkg) 是 Go 工作区中包含 Go 源文件或其他包的目录。源文件中的每个函数、变量和类型都存储在链接包中。每个 Go 源文件都属于一个包,该包在...
Go 支持什么形式的类型转换?
将整数转换为浮点数。 Go 支持显式类型转换以满足其严格的类型要求。i := 55 //int j := 67.8 //float64 sum :...
什么是 Goroutine?你如何停止它?
一个 Goroutine 是一个函数或方法执行同时旁边其他任何够程采用了特殊的 Goroutine线程。Goroutine 线程比标准线程更轻量级,大多数...
如何在运行时检查变量类型?
类型开关(Type Switch)是在运行时检查变量类型的最佳方式。类型开关按类型而不是值来评估变量。每个 Switch 至少包含一个case用作条件语句...
Go 两个接口之间可以存在什么关系?
如果两个接口有相同的方法列表,那么他们就是等价的,可以相互赋值。如果接口A的方法列表是接口B的方法列表的自己,那么接口B可以赋值给接口A。接口查询是否成功...
Go 当中同步锁有什么特点?作用是什么
当一个Goroutine(协程)获得了Mutex后,其他Goroutine(协程)就只能乖乖的等待,除非该Goroutine释放了该Mutex。RWMut...
Go 语言当中 Channel(通道)有什么特点,需要注意什么?
如果给一个 nil 的 channel 发送数据,会造成永远阻塞。如果从一个 nil 的 channel 中接收数据,也会造成永久阻塞。给一个已经关闭的 ...
看下面代码的 defer 的执行顺序是什么? defer的作用和特点是什么?
defer的作用是: 你只需要在调用普通函数或方法前加上关键字defer,就完成了defer所需要的语法。当defer语句被执行时,跟在defer后面的函...
Golang Slice 的底层实现
切片是基于数组实现的,它的底层是数组,它自己本身非常小,可以理解为对 底层数组的抽象。因为基于数组实现,所以它的底层的内存是连续分配的,效 率非常高,还可...
已加贵站~
name: 技研录
link: https://linmohan.fun/
avatar: https://linmohan.fun/img/favicon.png
descr: 「代码重构世界,逻辑解构真理」