[转] 08 - 如何优雅地关闭 channel

[原文: 08 - 如何优雅地关闭 channel](https://qcrao91.gitbook.io/go/channel/ru-he-you-ya-di-guan-bi-channel "原文: 08 - 如何优雅地关闭 channel") 关于 channel 的使用,有几点不方便的地方: - 1.在不改变 channel 自身状态的情况下,无法获知一个 channel

- 阅读全文 -

[转] Go进阶—并发编程 Mutex

[转自:【Go进阶—并发编程】Mutex https://segmentfault.com/a/1190000041467918](https://segmentfault.com/a/1190000041467918 "【Go进阶—并发编程】Mutex") 总结来说,GO语言中mutex的两种模式(正常模式和饥饿模式)的主要区别在于对等待锁的goroutine的优先级处理上: 正常模

- 阅读全文 -

Golang垃圾回收(GC) 底层原理

GO 1.8 以上使用三色标记 + 写屏障 机制 ## 三色标记 可以理解为标记法的改良版 将对象分为三个颜色 白色: 未标记待回收 灰色: 子对象未标记, 待检查 黑色: 已标记, 不回收 标记过程如下 (1)起初所有的对象都是白色的; (2)从根对象出发扫描所有可达对象,标记为灰色,放入待处理队列; (3)从待处理队列中取出灰色对

- 阅读全文 -

[转] 如何判断golang变量是分配在栈(stack)上还是堆(heap)上?

Go这门语言抛弃了C/C++中的开发者管理内存的方式:主动申请与主动释放,增加了逃逸分析和GC,将开发者从内存管理中释放出来,让开发者有更多的精力去关注软件设计,而不是底层的内存问题。这是Go语言成为高生产力语言的原因之一。 ### 一、如何判断变量是分配在栈(stack)上还是堆(heap)上? Golang 中的变量只要被引用就一直会存活,存储在堆上还是栈上由内部实现决定而和具体的语法

- 阅读全文 -