原文和后续更新:
> https://github.com/cch123/golang-notes/blob/master/sync.md
线性一致性模型
从原理上来讲,atomic 操作和非 atomic 操作之间不满足线性一致性模型。这和现代计算机的 CPU 乱序执行,以及 compiler
为优化而进行的指令重排有关。在 C++ 中针对各种场景和性能需求提供了各种 memory order 选项:
1. memory_order_relaxed Relaxed
最近写了一段代码,精简一下大概是这样:
type config struct {
fk2Opts map[string]string
}
type doublebuffer struct {
c1 config
c2 config
currentIdx int64
l sync.RWMutex
}
var option doublebuffer
func readConfig(key string) bool {
option.l.RLock()
defer
这周末终于把 《Go 高级编程》里我负责的章节写完了,松一口气。之前写的时候还是挺苦逼的,8 个月将近 20
篇内容,工作日休息日都在想要怎么系统化地去总结相关的知识。收获还是不少的。但是太苦了。一直在多线程思考 orz
顺利的话应该按部就班地半年内出版,最感谢的还是柴大这条大粗腿了,柴大好棒,能让我只靠 1/3 的内容就能让名字留在铅字资料上~
当然了,因为自身以前这方面总结的资料不多,所以写出来的东西肯定还是或多或少有一些问题的,今年剩下的四个月,会继续对已经写完的东西做完善和补充,但肯定没有之前压力大了。
对于个人来说,通过这本书,把所有 web 领域相关的知识全部进行了梳理和总结(
slice 和 array
要说 slice,那实在是太让人熟悉了,从功能上讲 slice 支持追加,按索引引用,按索引范围生成新的 slice,自动扩容等,和 C++ 或 Java 中的
Vector 有些类似,但也有一些区别。
不过 Go 里的 slice 还有一个底层数组的概念,这一点和其它语言不同。
runtime/slice.go
type slice struct
原文地址:
> https://github.com/cch123/golang-notes
汗,写完这篇就发现 Go 目前的 master 分支上 select 的实现有所修改,比如文中的 hselect
结构体已经消失了。之后还是抽时间分析分析新版。。
select 本身是 Go 提供的一个语法糖,每次你写
select {
}
的时候,实际上是相当于调用了一大堆函数。。只是 Go 的 runtime 内部帮你把这些复杂性屏蔽掉了。但是屏蔽也是有代价的,因为现在为止(