主题的晦涩 人生的短暂

kongjun18's Github chart

【译】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)的任务。为什么?从没有人给我解释过。在这篇文章中,我将解决这个谜团,

tar 格式详解

tar 是 tape archive 的简称,即“磁带归档”,最早出现在 1979 年的第 UNIX v7。磁带上的数据存储为可能不相邻的变长数据块,浪费了大量块与块之间的空间。向磁盘、网络传输数据时,传输一大块的效率远高于多个小块,因此程序员使用 tar 将磁带上的数据打包在一起,物理上存储在连续的、固定大小的块上以提高性能。 tar 打包出来的文件称为为 tarball。一般会使用某种压缩算法压缩 tarball,压缩后的
0%