首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
Go底层学习
HyggeBest
创建于2025-05-08
订阅专栏
golang底层的学习
等 1 人订阅
共13篇文章
创建于2025-05-08
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
Golang 并发原语 Sync Once
Once 保证操作只执行一次 适用于一些单例、配置的加载等 内部数据结构 done 用于标识操作是否已经完成只有0或1 m 互斥锁 核心方法 Do 原子加载done值是否为0 如果等于0说明f fun
Golang 并发原语 Sync Pool
Pool 对象池 主要适用于大量对象资源被反复构造和回收的场景 可以进行一个资源的回收利用、减轻GC压力提高性能 内部数据结构 nocopy:防止赋值的标识 local:类型为[P]poolLocal
Golang 并发原语 Sync Cond
Cond 条件变量 主要是用于多个goroutine之间进行通知 场景:等待某个事件的发生、通知某个事件发生 内部数据结构 noCopy 防止拷贝的一个标识 L 实现的一个互斥锁的接口 notify
Golang 内存管理
page:页是操作系统中用来描述内存大小的一个单位名称,一个页的含义是大小为4K(1024*4=4096字节) span:多个先连续的page组成的一片区域 接下来看看几个重要的数据结构。
Go GMP
先来理解一下,进程、线程、协程 进程:应用程序运行时的抽象 线程:依赖于进程,是线程是进程执行的最小单元,一个进程有多个线程 协程:协程是用户态的轻量级的线程 进程、线程为内核态下的,协程为用户态下的
Go channel close
channel是有一个主动关闭的方法,但是使用该方法需要注意,之前我们在channel写的源码里有看到,如果一个channel已经关闭的情况下还往channel中写入数据直接会panic的报错,这个会
Go channel 读流程
接下来看看channel的读过程look: 总结:还是一样为初始化的channel读取的时候会死锁,挂起永远不会被唤醒。判断如果非阻塞channel为空,channel未关闭,直接返回,然后判断cha
Go channel 写流程
我们看一下底层源码是怎么做的look: 总结流程: 如果往一个nil channel中写入数据将会直接阻塞无法被唤醒。如果向一个已经关闭的channel写入数据直接panic。判断非阻塞写入,chan
Go Channel 数据结构
先抛出一个问题:讲讲go中的channel,这个时候怎么回答? 首先channel是go中的一种数据类。 用于协程之间的通讯。 可以用于传递信号。 也可以批量收集一些程序执行的结果集。 当然,我的应用
Golang Map发生扩容之后Bucket如何进行迁移
Go的map迁移过程是渐进式迁移,其实这样做的目的就是为了防止大面积的迁移导致的性能问题。如果如果一次性进行全部迁移有可能会发生系能抖动的情况 Go的渐进式迁移是怎么做的呢?look: 一般情况下,读
Golang Map扩容机制
go map翻倍扩容(增量扩容)当桶内key-value总数/桶的长度>6.5时 看一下源码: count:当前map中key-value对数量 B:当前桶的对数 bucketCnt:每个桶能存的key-valu
Golang Map
1.map的底层其实就是hashmap,开发中用于存储简直对。不多说直接上源码hamp count:键值对的数量(len去长度时候直接读取这个值) flags:标识位,记录map状态,例如正在写入、等
Golang Slice
切片在声明和初始化的时候,可以选择设置长度(len)和容量(cap) 长度(len):切片的长度也可以指slice中的元素个数 容量(cap):从slice的起始位置到底层数组的长度末尾之间能容纳多少