V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
SGL
V2EX  ›  Go 编程语言

写屏障,概念混淆?

  •  
  •   SGL · 2 天前 · 2000 次点击
    最近在看左书祺的《 Go 语言设计与实现》

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

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

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

    内存屏障技术好像和 go 的三色标记法中的混合写屏障技术在概念上就不相干?
    9 条回复    2025-10-07 13:47:33 +08:00
    ihciah
        1
    ihciah  
       1 天前 via iPhone
    你引用的这段也没说 gc 啊。。(这类被研究透了的问题,gpt 比网友更快更准确
    hsiafan
        2
    hsiafan  
       1 天前
    这俩就不是一回事
    powerfulyang
        3
    powerfulyang  
       1 天前 via Android
    编译器重排场景吧
    geelaw
        4
    geelaw  
       1 天前   ❤️ 2
    是两个正交的概念,三色标记 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
        5
    geelaw  
       1 天前
    @geelaw #4 确保内存操作顺序。
    SGL
        6
    SGL  
    OP
       1 天前
    @ihciah 原文中在”三色抽象“那一章节里面插入了这么一段,让我一开始以为这个内存屏障技术是 go 的 gc 所依赖的一种 cpu 级的底层技术, 后来发现不是”
    xiaohanliang
        7
    xiaohanliang  
       1 天前
    @ihciah 活捉 chgg
    ihciah
        8
    ihciah  
       1 天前 via iPhone
    @xiaohanliang 我超!好久不见!
    saka1zd
        9
    saka1zd  
       1 天前
    这个应该是保证 happens-before 机制的吧?
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   700 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:41 · PVG 03:41 · LAX 12:41 · JFK 15:41
    ♥ Do have faith in what you're doing.