主题的晦涩 人生的短暂

kongjun18's Github chart

【译】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,压缩后的

Lua 语言简明教程

Lua is a powerful, efficient, lightweight, embeddable scripting language. It supports procedural programming, object-oriented programming, functional programming, data-driven programming, and data description. Lua combines simple procedural syntax with powerful data description constructs based on associative arrays and extensible semantics. Lua is dynamically typed, runs by interpreting bytecode with a register-based virtual machine, and has automatic memory management with incremental garbage collection, making it ideal for configuration, scripting, and rapid prototyping. 类型 Lua 使用动态类型,未初始化的全局变量值默认为 nil(通过元表实现)。 nil nil 是一个类型,同时也是一个值,即 nil 类型的值就是 nil,表示空或无(空类型)。 全局变量未初始化时(空),值就是 nil。当把变量赋值为 nil 时,表示该变量无
0%