可重启序列:多核微处理器性能提升利器,最高让性能提升百万倍! 发布时间:2026/8/7 2:18:58 可重启序列系统编程前沿秘密2026年5月31日Linux 4.18约2018年引入的可重启序列restartable sequences概念简称rseq是目前系统编程前沿最不为人知的秘密。借助它无需使用锁或原子操作就能创建线程安全的数据结构且这些数据结构在多核微处理器上也能实现良好的扩展性。目前在Linux上只能通过手写汇编代码来使用rseq。不过未来所有操作系统可能都会更新以支持rseq()所有系统编程语言也会重新设计以便能够表达可重启序列所有数据结构库也都会重写以使用可重启序列。rseq应用效果显著到目前为止已知使用rseq的软件只有tcmalloc、jemalloc、glibc和cosmopolitan。随着128核甚至192核的微处理器价格逐渐降低这种情况注定会改变。例如在价值160美元的4核树莓派5上rseq让malloc()实现速度提高了3倍在价值4834美元、搭载Ampere 128核3GHz Altra CPU的System76 Thelio Astra上rseq让cosmopolitan的malloc()速度提高了34倍在价值17628.55美元、拥有96核的AMD Threadripper Pro 7995WX上rseq让malloc()速度提高了43倍。如果系统程序员没有像上述配置的工作站就会像恐龙一样被时代淘汰错失10倍性能优化这样的唾手可得的成果。比如若没斥资购买96核CPU就无法实现矩阵乘法的加速。虽然购买CPU让经济紧张但一切都是值得的工作获得了媒体报道在AI社区中声名远扬项目被32%的组织采用甚至还获得了谷歌的工作邀请。可重启序列解决的问题每当Cosmopolitan C运行时在Linux系统上创建线程时会发出一个rseq()系统调用为内核提供32字节的TLS内存。线程生命周期内每当线程被重新调度内核都会更新TLS内存中的CPU编号这对改进sched_getcpu()实现非常有帮助现在只需1纳秒的宽松mov指令就能获取CPU编号而之前则需要等待1微秒的getcpu()系统调用。rseq TLS内存中有额外字段允许线程将信息返回给内核。通常rseq_cs字段为NULL但可用指针更新它指向程序中的一段汇编指令序列。当内核抢占线程并试图将其移动到不同CPU时会检查程序计数器是否位于指定区间内若是内核将强制线程跳转到指定的中止处理程序该处理程序可做一些事情比如跳回到函数开头重试操作。假设用类似全局解释器锁GIL的东西保护数据结构在拥有数十个核心的系统上性能会变得很慢因为任何时候只有一个线程可以持有锁。若用原子操作创建无锁列表处理出栈操作时需要处理[ABA问题](https://en.wikipedia.org/wiki/ABA_problem)但这种方法可能同样慢甚至更慢因为多个核心共享同一64字节的内存区域会导致CPU内部基本上使用互斥锁且CPU的内部互斥锁可能不如用户空间实现的好。一种更明智的方法是对数据结构进行分片让每个CPU都有自己的区域。但这样做仍然需要互斥锁因为操作系统可能会在加载CPU编号和进行任何数据修改之间抢占并重新定位线程。不过为每个CPU使用单独的互斥锁能确保只有在遇到极端情况时才会发生竞争。使用像[nsync](../mutex/)这样优秀的互斥锁库有竞争的锁操作至少需要200纳秒而无竞争的锁/解锁操作只需要大约15纳秒。还使用alignas(64)确保每个CPU的指针位于不同的缓存行从而将硬件内部的竞争概率降至极低。然而如果只是进行入栈和出栈操作与仅需约1纳秒的线程本地链表入栈或出栈操作相比这15纳秒的开销仍然很大。所以想去掉互斥锁唯一的障碍是一种很少出现的极端情况即操作系统在修改链表的一小段汇编指令序列期间中断了线程。Linux现在提供rseq()它是一个更明智的解决方案。借助可重启序列实际上可以去掉互斥锁和原子操作同时操作系统仍能完全抽象调度过程。其工作原理是当程序进入不想被中断的关键代码段时通知内核。这个关键代码段可能最多只有10条汇编指令。第一条汇编操作码应该是一个移动指令用于设置rseq_cs字段。最后一条指令需要对全局数据结构进行修改。可以将其看作一个非常小的数据库事务。它之所以快是因为与内核的双向通信是通过共享内存实现的。示例一构建最快的点击计数器下面介绍可重启序列构建一个简单的程序用于对一个数字进行递增操作。假设博客每秒有数十亿的访问量由多线程Web服务器托管需要跟踪访问量。有五种构建点击计数器的方法使用[cosmocc](../cosmo3/)来编译示例代码。通过对比不同实现方式的性能数据可发现rseq与使用glibc互斥锁来保护递增操作相比从CPU时间消耗来看实际上可以让性能提高一百万倍。在这五种方法中只有三种值得考虑一是分片在需要兼容所有操作系统时分片是最佳选择。使用cosmo_shard()函数指针来实现在现代Linux上它会使用__get_rseq()-cpu_id如果不可用则会回退到其他方法。二是亲和性亲和性方法速度最快但需要对所有线程进行微观管理对于库作者来说不可行对于应用程序作者来说可能也不是个好主意。不过在某些特定情况下它可能是合适的。三是可重启序列可重启序列做出了更优的权衡。目前它只在现代Linux上可用所以如果正在构建一个库或开源项目还需要支持其他策略。编写可重启序列的代码难度较高目前大语言模型LLM还不够智能无法帮助构建可重启序列。但未来编程语言可能会发生变化让我们能够优雅地表达可重启序列。从ARM工作站的情况来看Ampere的ARM Altra CPU的原子操作速度非常快Cosmopolitan对POSIX互斥锁的实现非常复杂其他数字上的差异大多与价格差异相称使用可重启序列让3GHz CPU的性能提升到了33GHz使用互斥锁让3GHz CPU的性能降至219MHz。示例二链表的入栈和出栈操作假设想全局跟踪对象实例使用rseq相对容易实现分片链表的push()和pop()操作。以下是一个可以用[cosmocc](../cosmo3/)编译的示例代码去掉了锁和原子操作。使用alignas(64)确保每个CPU的内存位于不同的缓存行这意味着硬件内部不会发生同步冲突。对这段汇编代码进行分析使用[理查德·斯托曼Richard Stallman的Math 55汇编表示法]GNU汇编器与C/C约束系统相结合是非常强大的工具。代码中通过.pushsection和.popsection将内容转移到可执行文件的不同区域布局了static const struct rseq_cs的内容描述了可重启序列。可重启序列中的前两条操作码修改与内核共享的一段TLS内存当内核决定抢占线程时会检查rseq_cs字段并读取只读数据结构以确定程序计数器是否当前位于300标签内若是内核会将程序计数器更改为指定的abort_ip。接下来加载__get_rseq()-cpu_id_start字段左移6位重新计算内存索引。最后执行实际的入栈操作直到最后一条指令才实际修改全局内存整个序列就像一个事务最后一条指令是提交更改的指令。中止处理程序很简单只是跳回到可重启序列的开头。这段代码唯一令人惊讶的是内核要求它以一个任意的32位字作为前缀这个字之前已经传递给rseq()系统调用。还将中止处理程序代码转移到二进制文件的.text.unlikely段。在Cosmopolitan Libc的malloc()实现中使用了该技术当请求一个小的内存分配少于512字节时会尝试从全局分片列表中弹出一块内存。如果列表中没有可用的内存会向mmap()请求一个新的内存页将其分成小块全部入栈然后再次尝试分配操作。但缺点是很难将内存释放回系统。最后编写了测试入栈和出栈函数的代码创建多个线程进行测试并在程序结束时清理内存。那么可重启序列在未来的系统编程中还会有哪些更出色的表现呢 相关新闻 Viking AI 搜索 CLI 正式发布:会说话,就能做搜索推荐 无论是搜索、推荐还是问答,把企业的数据资产变成可检索、可调用的智能服务,往往意味着一条漫长且高门槛的链路 —— 数据清洗、Embedding 选型、索引构建、策略配置、效果调优…… 每一个环节都离不开工程投入和算法经验。 Viking AI 搜索 CLI &#x… 2026/8/7 2:17:28 1994 年微软实习面试四道编程问题大揭秘,你能答对几道? 突发:回顾 1994 年微软实习面试编程问题本周没有 [性能感知编程] 的课程,因为这周是“1994 年暑期实习周”。本周将发布五篇文章,讲述 1994 年申请微软暑期实习面试时被问到的编程问题。正常安排的课程将在下周恢复。面试背景很久之前&#x… 2026/8/7 2:18:10 你的数据库真的够快吗?用sysbench-1.20做个基准测试入门(附CPU/内存/文件IO测试命令) 你的数据库真的够快吗?用sysbench-1.20做个基准测试入门 想象一下你刚买了一辆跑车,销售告诉你它能在3秒内完成0-100公里加速。但你真的相信吗?聪明的车主会亲自踩下油门验证这个数字——这就是基准测试的本质。在IT领域,sysbench… 2026/8/1 22:41:43 最新新闻 Qt触屏事件开发实战:从多点触控到手势识别 1. 从鼠标到指尖:为什么Qt触屏事件值得你花时间如果你和我一样,从传统的桌面应用开发转向移动或触摸屏设备开发,那么“Qt中的触屏事件”这个话题,绝对是你绕不开的一道坎。它不像按钮点击那样直观,也不像键盘事件那样有… 2026/8/7 2:16:28 FreeRTOS核心机制与面试高频问题深度解析 1. 项目概述与核心价值最近在帮团队筛选嵌入式软件工程师,也和一些准备跳槽的朋友聊了聊,发现一个挺普遍的现象:很多人简历上项目经验写得天花乱坠,STM32、ESP32玩得飞起,但一聊到操作系统,特别是FreeRTOS&… 2026/8/7 2:16:28 Qt触屏事件深度解析:从QTouchEvent到多点触控绘图板实战 1. 项目概述:为什么Qt触屏事件值得深挖?在移动设备和触摸屏一体机越来越普及的今天,为桌面应用添加触屏支持已经从一个“加分项”变成了很多场景下的“必需品”。作为一名有十多年经验的Qt开发者,我见过太多项目在初期只考虑键鼠操… 2026/8/7 2:16:28 Qt触屏事件处理:从原理到多点触控绘图板实战 1. 项目概述:为什么Qt触屏事件值得深挖在移动设备和触摸屏一体机越来越普及的今天,为桌面应用添加流畅的触屏交互能力,已经从“锦上添花”变成了“雪中送炭”。作为一名在Qt框架下摸爬滚打了十多年的开发者,我见过太多项目在从纯鼠… 2026/8/7 2:16:28 VibeCoding框架深度解析:从桌面宠物到可编程交互伴侣的开发实践 如果你最近在关注桌面宠物或者游戏角色互动,可能已经听说过 VibeCoding 。这个名字听起来很酷,但很多新手在第一次接触时,往往会陷入一个误区:以为它只是一个简单的“桌宠”或“美化工具”,下载下来就能直接玩。结果… 2026/8/7 2:16:28 需求规格说明书撰写指南:从核心价值到实战结构详解 1. 项目概述:为什么需求规格说明书是项目的“宪法” 在软件开发的江湖里摸爬滚打十几年,我见过太多项目因为一份糟糕的需求文档而陷入泥潭。需求规格说明书,这个听起来有点官方、有点枯燥的词,恰恰是决定一个项目是顺利交付还是最… 2026/8/7 2:11:28 日新闻 “Quality Control(质量控制)”在软件工程中通常指通过一系列活动确保软件产品符合预定的质量标准和用户需求 “Quality Control(质量控制)”在软件工程中通常指通过一系列活动确保软件产品符合预定的质量标准和用户需求。而“软件测试”是质量控制的关键手段之一,属于QC范畴下的具体实践,其目标是发现缺陷、验证功能正确性、评估软件质量属… 2026/8/7 0:01:21 调度算法(Scheduling Algorithm)是操作系统内核中用于决定哪个进程或线程在何时获得CPU资源执行的核心机制 调度算法(Scheduling Algorithm)是操作系统内核中用于决定哪个进程或线程在何时获得CPU资源执行的核心机制。其目标是在多任务环境中实现公平性、高效性、响应性与吞吐量的平衡。常见的调度算法包括: 先来先服务(FCFS)… 2026/8/7 0:01:21 Cisco IOS XE 曝多个高危安全漏洞,企业网络设备面临远程攻击风险 最近思科发布了一则让不少网安从业者捏把汗的安全公告。旗下广泛部署的 Cisco IOS XE 软件被挖出多个严重漏洞,其中最狠的一个拿到了 CVSS 9.8 的满分级评分,几乎触顶。对于依赖思科设备支撑核心业务的企业来说,这绝不是可以拖到下季度再处理… 2026/8/7 0:01:21 周新闻 ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案 ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经从网易云音乐下载了心爱的歌曲&am… 2026/8/6 10:11:44 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比工程导读:本文深入讨论 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比 在生产工程实践中的核心落地方案。基于 分布式架构与微服务设计 视角,剖析实际痛点、架… 2026/8/5 7:15:00 MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案 MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案 【免费下载链接】MoneyPrinterPlus AI一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上,赚钱从来没有这么容易过! 支持本地语音模型chatTTS,fasterwhisper,… 2026/8/5 6:23:51 月新闻 【YOLOv11模型改进系列】08 数据增强的终极形态:用AutoAugment让YOLOv11自己学会“什么数据最有用” 08 数据增强的终极形态:用AutoAugment让YOLOv11自己学会“什么数据最有用” 老伙计,咖啡准备好了吗?上篇我们聊了Mosaic+MixUp的“混乱美学”,你肯定已经体会到,手动调数据增强策略就像给模型当保姆——每换一个数据集就要重新试一遍参数。 上周有个做工业质检的朋友找我… 2026/8/5 7:15:27 AI 智能电动窗帘电机高集成、低功耗 MOSFET 精准选型方案 随着 AIoT 与智能家居深度融合,智能电动窗帘电机对功率 MOSFET 提出新要求:微型化、高效率、逻辑电平驱动及静音运行。微碧半导体(VBsemi)基于先进的 Trench 和 SGT 工艺,为您提供覆盖 H桥驱动、电源管理及电机控制的完… 2026/8/4 8:25:47 AI 智能电动窗帘电机智能功率 MOSFET 完整选型方案 随着 AI 技术在智能家居中的普及(如语音控制、光线感应、场景联动),电动窗帘电机对功率 MOSFET 提出更高要求:高效率、低噪音、高集成度。微碧半导体(VBsemi)基于 SGT 及 Trench 工艺,为您提供覆… 2026/8/6 6:12:06
Viking AI 搜索 CLI 正式发布:会说话,就能做搜索推荐 无论是搜索、推荐还是问答,把企业的数据资产变成可检索、可调用的智能服务,往往意味着一条漫长且高门槛的链路 —— 数据清洗、Embedding 选型、索引构建、策略配置、效果调优…… 每一个环节都离不开工程投入和算法经验。 Viking AI 搜索 CLI &#x… 2026/8/7 2:17:28
1994 年微软实习面试四道编程问题大揭秘,你能答对几道? 突发:回顾 1994 年微软实习面试编程问题本周没有 [性能感知编程] 的课程,因为这周是“1994 年暑期实习周”。本周将发布五篇文章,讲述 1994 年申请微软暑期实习面试时被问到的编程问题。正常安排的课程将在下周恢复。面试背景很久之前&#x… 2026/8/7 2:18:10
你的数据库真的够快吗?用sysbench-1.20做个基准测试入门(附CPU/内存/文件IO测试命令) 你的数据库真的够快吗?用sysbench-1.20做个基准测试入门 想象一下你刚买了一辆跑车,销售告诉你它能在3秒内完成0-100公里加速。但你真的相信吗?聪明的车主会亲自踩下油门验证这个数字——这就是基准测试的本质。在IT领域,sysbench… 2026/8/1 22:41:43
Qt触屏事件开发实战:从多点触控到手势识别 1. 从鼠标到指尖:为什么Qt触屏事件值得你花时间如果你和我一样,从传统的桌面应用开发转向移动或触摸屏设备开发,那么“Qt中的触屏事件”这个话题,绝对是你绕不开的一道坎。它不像按钮点击那样直观,也不像键盘事件那样有… 2026/8/7 2:16:28
FreeRTOS核心机制与面试高频问题深度解析 1. 项目概述与核心价值最近在帮团队筛选嵌入式软件工程师,也和一些准备跳槽的朋友聊了聊,发现一个挺普遍的现象:很多人简历上项目经验写得天花乱坠,STM32、ESP32玩得飞起,但一聊到操作系统,特别是FreeRTOS&… 2026/8/7 2:16:28
Qt触屏事件深度解析:从QTouchEvent到多点触控绘图板实战 1. 项目概述:为什么Qt触屏事件值得深挖?在移动设备和触摸屏一体机越来越普及的今天,为桌面应用添加触屏支持已经从一个“加分项”变成了很多场景下的“必需品”。作为一名有十多年经验的Qt开发者,我见过太多项目在初期只考虑键鼠操… 2026/8/7 2:16:28
Qt触屏事件处理:从原理到多点触控绘图板实战 1. 项目概述:为什么Qt触屏事件值得深挖在移动设备和触摸屏一体机越来越普及的今天,为桌面应用添加流畅的触屏交互能力,已经从“锦上添花”变成了“雪中送炭”。作为一名在Qt框架下摸爬滚打了十多年的开发者,我见过太多项目在从纯鼠… 2026/8/7 2:16:28
VibeCoding框架深度解析:从桌面宠物到可编程交互伴侣的开发实践 如果你最近在关注桌面宠物或者游戏角色互动,可能已经听说过 VibeCoding 。这个名字听起来很酷,但很多新手在第一次接触时,往往会陷入一个误区:以为它只是一个简单的“桌宠”或“美化工具”,下载下来就能直接玩。结果… 2026/8/7 2:16:28
需求规格说明书撰写指南:从核心价值到实战结构详解 1. 项目概述:为什么需求规格说明书是项目的“宪法” 在软件开发的江湖里摸爬滚打十几年,我见过太多项目因为一份糟糕的需求文档而陷入泥潭。需求规格说明书,这个听起来有点官方、有点枯燥的词,恰恰是决定一个项目是顺利交付还是最… 2026/8/7 2:11:28
“Quality Control(质量控制)”在软件工程中通常指通过一系列活动确保软件产品符合预定的质量标准和用户需求 “Quality Control(质量控制)”在软件工程中通常指通过一系列活动确保软件产品符合预定的质量标准和用户需求。而“软件测试”是质量控制的关键手段之一,属于QC范畴下的具体实践,其目标是发现缺陷、验证功能正确性、评估软件质量属… 2026/8/7 0:01:21
调度算法(Scheduling Algorithm)是操作系统内核中用于决定哪个进程或线程在何时获得CPU资源执行的核心机制 调度算法(Scheduling Algorithm)是操作系统内核中用于决定哪个进程或线程在何时获得CPU资源执行的核心机制。其目标是在多任务环境中实现公平性、高效性、响应性与吞吐量的平衡。常见的调度算法包括: 先来先服务(FCFS)… 2026/8/7 0:01:21
Cisco IOS XE 曝多个高危安全漏洞,企业网络设备面临远程攻击风险 最近思科发布了一则让不少网安从业者捏把汗的安全公告。旗下广泛部署的 Cisco IOS XE 软件被挖出多个严重漏洞,其中最狠的一个拿到了 CVSS 9.8 的满分级评分,几乎触顶。对于依赖思科设备支撑核心业务的企业来说,这绝不是可以拖到下季度再处理… 2026/8/7 0:01:21
ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案 ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经从网易云音乐下载了心爱的歌曲&am… 2026/8/6 10:11:44
分布式配置中心选型实战:Nacos与Consul在创业场景下的对比 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比工程导读:本文深入讨论 分布式配置中心选型实战:Nacos与Consul在创业场景下的对比 在生产工程实践中的核心落地方案。基于 分布式架构与微服务设计 视角,剖析实际痛点、架… 2026/8/5 7:15:00
MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案 MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案 【免费下载链接】MoneyPrinterPlus AI一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上,赚钱从来没有这么容易过! 支持本地语音模型chatTTS,fasterwhisper,… 2026/8/5 6:23:51
【YOLOv11模型改进系列】08 数据增强的终极形态:用AutoAugment让YOLOv11自己学会“什么数据最有用” 08 数据增强的终极形态:用AutoAugment让YOLOv11自己学会“什么数据最有用” 老伙计,咖啡准备好了吗?上篇我们聊了Mosaic+MixUp的“混乱美学”,你肯定已经体会到,手动调数据增强策略就像给模型当保姆——每换一个数据集就要重新试一遍参数。 上周有个做工业质检的朋友找我… 2026/8/5 7:15:27
AI 智能电动窗帘电机高集成、低功耗 MOSFET 精准选型方案 随着 AIoT 与智能家居深度融合,智能电动窗帘电机对功率 MOSFET 提出新要求:微型化、高效率、逻辑电平驱动及静音运行。微碧半导体(VBsemi)基于先进的 Trench 和 SGT 工艺,为您提供覆盖 H桥驱动、电源管理及电机控制的完… 2026/8/4 8:25:47
AI 智能电动窗帘电机智能功率 MOSFET 完整选型方案 随着 AI 技术在智能家居中的普及(如语音控制、光线感应、场景联动),电动窗帘电机对功率 MOSFET 提出更高要求:高效率、低噪音、高集成度。微碧半导体(VBsemi)基于 SGT 及 Trench 工艺,为您提供覆… 2026/8/6 6:12:06