主题的晦涩 人生的短暂

kongjun18's Github chart

致敬经典:K&R allocator 内存分配器

k&R allocator 是Brain Kernighan和 Dennis Ritchie 的名著 The C Programming Language 第 8.7 节中介绍的一个简单 malloc 实现。因为该书被称为 K&R C,这个 malloc 实现也被称为 K&C allocator。 K&R allocator 的实现非常简洁,Linux 内核基于 K&R allocator 实现了用于嵌入式系统 slob allocator。见 slob: introduce the SLOB allocator,邮件摘要如下: SLOB is a traditional K&R/UNIX allocator with a SLAB emulation layer, similar to the original Linux kmalloc allocator that SLAB replaced. It's signicantly smaller code and is more memory efficient. But like all similar allocators, it scales poorly and suffers from fragmentation more than

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

译者序 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 虽然符合人类直觉,但限制了处理器
0%