Go 系列文章 10: sync

原文和后续更新: > https://github.com/cch123/golang-notes/blob/master/sync.md 线性一致性模型 从原理上来讲,atomic 操作和非 atomic 操作之间不满足线性一致性模型。这和现代计算机的 CPU 乱序执行,以及 compiler 为优化而进行的指令重排有关。在 C++ 中针对各种场景和性能需求提供了各种 memory order 选项: 1. memory_order_relaxed Relaxed

Go 1.9.2 的 bug

最近写了一段代码,精简一下大概是这样: 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 领域相关的知识全部进行了梳理和总结(

Go 系列文章 9: slice

slice 和 array 要说 slice,那实在是太让人熟悉了,从功能上讲 slice 支持追加,按索引引用,按索引范围生成新的 slice,自动扩容等,和 C++ 或 Java 中的 Vector 有些类似,但也有一些区别。 不过 Go 里的 slice 还有一个底层数组的概念,这一点和其它语言不同。 runtime/slice.go type slice struct

Go 系列文章 8: select

原文地址: > https://github.com/cch123/golang-notes 汗,写完这篇就发现 Go 目前的 master 分支上 select 的实现有所修改,比如文中的 hselect 结构体已经消失了。之后还是抽时间分析分析新版。。 select 本身是 Go 提供的一个语法糖,每次你写 select { } 的时候,实际上是相当于调用了一大堆函数。。只是 Go 的 runtime 内部帮你把这些复杂性屏蔽掉了。但是屏蔽也是有代价的,因为现在为止(