写屏障,概念混淆?

21 天前
 YanSeven
最近在看左书祺的《 Go 语言设计与实现》

这个是开源的网页书的原文:

“内存屏障技术是一种屏障指令,它可以让 CPU 或者编译器在执行内存相关操作时遵循特定的约束,目前多数的现代处理器都会乱序执行指令以最大化性能,但是该技术能够保证内存操作的顺序性,在内存屏障前执行的操作一定会先于内存屏障后执行的操作 6 。”

这个是不是有所概念混淆了。

内存屏障技术好像和 go 的三色标记法中的混合写屏障技术在概念上就不相干?
2710 次点击
所在节点    Go 编程语言
9 条回复
ihciah
21 天前
你引用的这段也没说 gc 啊。。(这类被研究透了的问题,gpt 比网友更快更准确
hsiafan
21 天前
这俩就不是一回事
powerfulyang
21 天前
编译器重排场景吧
geelaw
21 天前
是两个正交的概念,三色标记 GC 里的 read/write barrier 是指读写 GC 管理的引用之前,编译器插入从而导致运行的代码(辅助 GC 算法),memory fence 是多线程程序里确保某些内存操作在多线程下可观测顺序的指令(因为 CPU 会乱序执行,通常只能保证结果在单线程下无区别,加入 memory fence 可以约束多线程下的内存操作顺序)。

并行 GC 肯定是需要一些同步操作的,可以用 lock/mutex ,这样就自带内存操作的同步,如果要写无锁的,也可以考虑用 memory fence 确保内存操作。因此一个 GC 里面可能会同时使用 read/write barrier 和 memory fence 。

最后,memory fence 也可以叫做 memory barrier 。

————

楼主引用的段落第一个分句就有严重的语病:

>内存屏障技术是一种屏障指令
>技术是指令

这句话的正确说法是

>内存屏障是一种指令

>内存屏障技术/技巧是利用特殊指令约束指令乱序执行和多线程下内存操作顺序的方法

然后我随便翻了一下那本书的前几页,真是惨不忍睹:

>发展到今天已经有过去了 10 多年

有、过去了 句式杂糅。

>目前的 Go 语言在国内外的社区都非常热门

第一个“的”不符合汉语使用习惯。

>很多著名的开源框架,例如:Kubernetes 、etcd 和 Prometheus 等都使用 Go 语言开发,近年来热门的微服务架构和云原生技术也为 Go 语言社区带来了非常多的活力。

冒号管辖范围错误。

>也坚定地认为这门语言未来的发展会越来愈好。

越来越、愈来愈 杂糅。

>很多文章都会陷入对不重要的细节,大量的篇幅都是复制的源代码,分析介绍的过程也没有分清主次,不能提供很好的阅读体验。

句式不符合汉语习惯,应该是“陷入对不重要的细节的纠结”。

我不确定这些充斥大量语病的内容是怎么出版出来的,作者、编辑、校对都没有上心?
geelaw
21 天前
@geelaw #4 确保内存操作顺序。
YanSeven
21 天前
@ihciah 原文中在”三色抽象“那一章节里面插入了这么一段,让我一开始以为这个内存屏障技术是 go 的 gc 所依赖的一种 cpu 级的底层技术, 后来发现不是”
xiaohanliang
21 天前
@ihciah 活捉 chgg
ihciah
21 天前
@xiaohanliang 我超!好久不见!
saka1zd
21 天前
这个应该是保证 happens-before 机制的吧?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1163568

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX