Go iota 实现枚举

August 9, 2022 · 1 min · 157 words · fgh

Go Mutex 原理

August 9, 2022 · 2 min · 309 words · fgh

Go 并发模型和常见并发模式

并发与并行: 并发(concurrency)是独立执行的运算的组合,是一种组织软件代码的模式; 并发更多考虑的是代码结构,它的目标是产出简洁的代码(clean code); 并行(parallelism)是指同时执行多项任务; 并行更多的是关于代码的执行方式(多实例)。 Do not communicate by sharing memory; instead, share memory by communicating. Go 始终推荐以 CSP (Communicating Sequential Process) 模型的风格构建并发程序。 select 语句是一种专属于并发的控制结构(control structure),它是把通道和协程这两个并发元素作为 Go 语言原生特性而不是一个库函数的的原因。用 select 可以轻易地实现控制结构,而用外部库函数则很难。 fan-in/fan-out: fan-in 负责任务汇总,一个协程从多个通道中读取数据并 multiplex 到一个通道,直到所有输入源关闭为止。 fan-out 负责任务分发,多个协程去同一个通道读取数据,起到在多个 worker 中分配任务、使 CPU 和 I/O 并行化的作用。 协程去 fan-in 后的通道获取任务。 TL;DR 在循环中开启协程要特别注意是否需要使用闭包。 通知+等待: g1 通知 g2 结束并等待 g2 结束后再结束:g1 往 ch1 写数据通知,等待读 ch2 成功后再退出;g2 读到 ch1 后结束工作、执行 cleanup,最后写 ch2。 一个协程等待多个子协程结束:子协程启动时 wg.Add(1) 并 defer wg....

December 30, 2021 · 10 min · 1925 words · fgh

Go 内存模型

September 29, 2021 · 2 min · 424 words · fgh

Reflection in Go

April 9, 2021 · 8 min · 1639 words · fgh