深入解析Go语言Channel的底层实现与最佳实践 本文基于Go 1.24版本,从汇编和源码层面深入剖析Channel的内部机制,并探讨在实际开发中的正确使用方式。 前景提要 上文我们了解了golang中channel分类和用法,以及hchan数据结构。 但我们还不知道这些元素都有什么用,需要了解更多源码。 接下来我们会频繁用到一条查看汇编代码的指…
本文讲述了golang中的channel设计哲学、基本操作、底层数据结构以及最佳实践,帮助初学者快速入门。
本文接续上篇,介绍GC全过程,Go GC采用增量并发三色标记,短暂停顿,自动与手动触发,分四阶段高效回收内存。
本文介绍了Golang的垃圾回收策略的发展、垃圾回收的关键知识:STW、常见垃圾回收策略以及核心的三色标记法
被废弃的golang调度器 在2012年之前,用的是P不存在的GM调度器 线程M 想要执行、放回 协程G 都必须访问全局 G 队列,并且 M 有多个,即多线程访问同一资源需要加锁进行保证互斥 / 同步,所以全局 G 队列是有互斥锁进行保护的。 这样明显会发现一个问题,当M空闲都申请G时,形成锁竞争;甚至M0申请G、M1放回G都会形成竞争,效…
1.使用container/list实现 首先,我们要了解标准库中的双向链表list 标准库list详解 list.go源文件https://cs.opensource.google/go/go/+/refs/tags/go1.24.2:src/container/list/list.go 在 Go 语言的 contai…
官方文档:https://grpc.org.cn/docs 中文文档:https://doc.oschina.net/grpc 什么是gRPC 在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。 与许多 RPC 系统类似,gRPC 也是基于以下理念:定义一个服…
Mistakes of Golang 记录个人在学习和编写go项目/习题时出现的错误 1.字符转换string to int int(a[index]) 这样的转换得到的是字符的 ASCII 码值,而不是二进制数 0 或 1。正确的做法是将字符减去字符 '0' 来得到对应的整数值。 //错误案例 int_a = int(str_…
在Fleet上配置及使用Golang 以下内容在官网教程下实现,https://www.jetbrains.com/help/fleet/getting-started-with-go.html#debugging-your-code Fleet的安装 JetBrains Toolbox:下载页面。 Go SDK:go.dev 上的下载页面。 在T…