Go
文章平均质量分 95
凑个整数1024
这个作者很懒,什么都没留下…
展开
-
【Go】被遗忘的并发原语——sync.Cond
本文介绍了 Go 语言标准库提供的条件变量并发原语`sync.Cond`的一般使用方法,并对比其与 Go 原生的 channel 在不同场景时的优劣。然后我们浅析了`sync.Cond`的源码实现,有助于我们对`sync.Cond`使用方式的理解。原创 2024-02-17 22:31:16 · 1009 阅读 · 1 评论 -
【Go】扩展并发原语之errgroup.Group的实战与源码解读
虽然提供了对错误的返回,但是只能返回所有启动的 goroutine 产生的第一个错误,如果不做额外扩展的话后面所产生的错误都会被丢弃,然而在很多时候,获取每个 goroutine 的错误情况又是很必要的。是将输入文本转化为可读 channel,后三者则分别对应了 MapReduce 的三个步骤,它们每个步骤所产生的 channel 都作为下一步操作的输入 channel,会将数据全部存于内存中,在实际生产中可能会遇到很大的文件,这时候我们就需要考虑其它的堆实现方式了,不过这不是本文的重点。原创 2024-01-31 23:34:05 · 1135 阅读 · 0 评论 -
Golang代码运行时类型复制检查器copyChecker的实现
今天在翻看 Golang sync 包源码时发现了一个以前从来没有仔细看过的代码实现——代码运行时类型复制检查器copyCheker,它的作用是可以在 Go 代码运行时,检测一个类型实例是否是复制的,如果是复制的则会触发panic。copyCheker目前仅被标准库中sync.Cond这个并发同步原语所使用,当一个sync.Cond变量在运行时被复制了,使用了复制的sync.Cond便会抛出,因此该检查器源码也与sync.Cond一同位于。原创 2024-02-01 22:28:48 · 1619 阅读 · 1 评论 -
【Go】一文带你掌握同步原语sync.Once底层原理及扩展玩法
本文介绍了 Go 标准库中的并发原语sync.Once的基本使用,然后对其源码实现进行了解析。了解了sync.Once原理后我们可以对sync.Once进行更高级的玩法以及拓展,实现了如返回值处理、初始化失败处理、判断是否执行完成等。这位 Gopher 你好呀!如果觉得我的文章还不错,欢迎一键三连支持一下!文章会定期更新,同时可以微信搜索【凑个整数1024】第一时间收到文章更新提醒⏰。原创 2024-02-01 22:26:48 · 2020 阅读 · 1 评论