主题的晦涩 人生的短暂

kongjun18's Github chart

【译】内存屏障:软件黑客的硬件视角

译者序 Memory Barriers: a Hardware View for Software Hackers 是并发编程专家 Paul E. McKenney 的经典论文,该论文同时收录在他的著作 Is Parallel Programming Hard, And, If So, What Can You Do About It? 附录 C Why Memory Barriers? 中。 本文全文翻译该论文。 为什么中了邪的 CPU 设计者要让可怜的一无所知的软件设计者受内存屏障(memory barrier)的伤害? 简单地说,因为乱序内存引用可以带来更好的性能,所以需要用内存屏障在同步原语这类其正确操作依赖于排序的内存引用的东西中强制

【译】Go 语言数据竞争检测器

简介 数据竞争是并发程序中最普遍和最难调试的 bug。当两个 goroutine 并发访问同一变量且至少一个访问是写时发生数据竞争。更多细节参考 The Go Memory Model。 译者注 The Go Memory Model 可以参考我的博客 【译】Go 语言内存模型:2022-06-06 版。 这有一个可以导致程序崩溃(crashes)和内存损坏(memory corruption)的数据竞争的例子: xian sxian sfunc main() { c := make(chan bool) m := make(map[string]string) go func() { m["1"] = "a" //

【译】Go 语言内存模型:2022-06-06 版

译者序 原文 The Go Memory Model 描述 Go 语言内存模型,这里的内存模型实际上是“内存一致性模型”(memory consistency model)。笔者修改了格式错误并翻译全文。 The Go Memory Model 在内存一致性模型层面,描述 Go 语言实现(Go implementation)提供的一致性保证,并进一步指出该保证对 Go 语言实现的限制;在工程实践层面,描述使用同步原语确保 goroutine 间可见性的方法,并进一步指出常见的错误同步手法。

【译】一种面向多核架构的无锁、缓存高效的共享环形缓冲区

译者序 论文 A Lock-Free, Cache-Efficient Shared Ring Buffer for Multi-Core Architectures 介绍了一种专为多核架构设计、用于单生产者/单消费者模型的环形缓冲区,称为 MCRingBuffer。论文性能测试表明,其吞吐量数倍于 Lamport 提出的 BasicRingBuffer。 MCRingBuffer 将环形缓存区划分为多个块,块划分为多个槽。 论文基于基础的环形缓冲区,从以下两方面着手提高性能: 降低读共享控制变量的频率:维护私有变量,仅在缓冲区可能满/空时读取

【译】 如何设计正确运行多进程程序的多核计算机

TL;DR SC(Sequential Consistency):任何执行的结果看起来就像所有处理器都顺序执行,并且单个处理器按照程序指定次序执行。 每个处理器都是顺序的,不意味着整个多核系统是顺序一致的。 SC 是一个定义在内存访问上的偏序。 为了实现 SC,处理器需要满足两个条件: 处理器按照程序次序发起请求。发起请求包括进入内存模块的队列。 内存模块按照 FIFO 次序响应请求。 SC 虽然符合人类直觉,但限制了处理器

【译】拨开 Linux 平均负载的谜团

平均负载(load averages)是一个很关键的指标——我所在的公司基于平均负载和其他指标,花费数百万去自动伸缩云实例——但在 Linux 上存在许多和平均负载相关的谜题。Linux 平均负载不仅追踪运行态(runnable)任务,也追踪处于不可中断休眠状态(uninterruptible sleep state)的任务。为什么?从没有人给我解释过。在这篇文章中,我将解决这个谜团,
0%