伪共享是多线程中因不同变量同处一缓存行引发的性能瓶颈:一核写导致整行失效,他核读写需重加载,造成缓存行颠簸;根源在于CPU以64字节缓存行为单位管理内存,且仅并发写才触发问题。
伪共享是多线程程序中一种隐蔽的性能瓶颈:多个线程频繁修改位于同一CPU缓存行(通常是64字节)但逻辑上无关的变量,导致缓存行在核心间反复无效化和同步,严重拖慢执行速度。
CPU以缓存行为单位加载和写回内存。即使两个变量在代码中完全独立、分属不同线程,只要它们在内存中地址相近(比如相邻成员变量、数组相邻元素),就可能落入同一缓存行。当一个线程修改其中某个变量时,整个缓存行被标记为“已修改”,其他核心上该行副本立即失效;另一线程读/写同行内另一变量时,必须重新从内存或其它核心拉取整行——这叫“缓存行颠簸”(cache line bouncing)。
结构体成员挤在一起
多个线程各自更新不同对象的某个字段(如 counter),但这些对象是连续分配的数组,且 counter 在结构体开头或未对齐:
struct alignas(64) PaddedCounter { // 对齐到64字节边界
std::atomic value{0};
char _pad[64 - sizeof(std::atomic)]; // 填充至一整行
};
std::vector counters(4); // 每个counter独占一行
数组元素被不同线程轮着改
比如4个线程分别累加 arr[0]、arr[1]、arr[2]、arr[3],而 sizeof(int) == 4,64字节能塞16个int——前4个很可能同属一行。
手动填充(Padding)
用 alignas(64) 强制结构体按缓存行对齐,并在热点变量后补足空间,确保它独占一行。注意:仅对真正被多线程并发写的变量做填充,别盲目加。
重排数据布局
把会被同一线程
访问的变量放一起(提高局部性),把被不同线程写的变量尽量拉开距离。例如用结构体数组(AOS)改成数组结构体(SOA):把所有线程的 x 存一起、所有 y 存一起,再按线程号索引,减少跨行访问。
使用线程局部存储(TLS)+ 合并汇总
每个线程先写自己的本地计数器(如 thread_local int local_count),最后单线程合并到全局变量。避免任何跨线程写竞争。
确认是否真有伪共享
别靠猜测优化。用 perf(Linux)看 cache-misses、LLC-load-misses 是否异常高;或用 VTune、perf annotate 定位热点指令的内存访问模式。有时候看似伪共享,其实是锁争用或内存带宽不足。
基本上就这些。伪共享不复杂但容易忽略,关键在“写”——只读不会触发无效化,只有并发写才危险;排查时优先看数据布局和缓存行对齐,而不是一上来就改算法。
# linux
# 字节
# c++
# nas
# 热点
# 性能瓶颈
# 为什么
# 成员变量
# 全局变量
# 结构体
# int
# thread_local
# 线程
# 多线程
# 并发
# 对象
# padding
# 算法
# 多个
# 自己的
# 加载
# 并在
# 很可能
# 真有
# 或其它
# 这叫
# 或用
相关文章:
高端建站如何打造兼具美学与转化的品牌官网?
建站之星伪静态规则如何正确配置?
如何在橙子建站中快速调整背景颜色?
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
建站VPS推荐:2025年高性能服务器配置指南
制作网站的基本流程,设计网站的软件是什么?
如何登录建站主机?访问步骤全解析
如何在宝塔面板创建新站点?
如何在IIS中新建站点并配置端口与IP地址?
定制建站是什么?如何实现个性化需求?
如何设置并定期更换建站之星安全管理员密码?
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
Swift开发中switch语句值绑定模式
建站之星安装模板失败:服务器环境不兼容?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
javascript中的try catch异常捕获机制用法分析
定制建站模板如何实现SEO优化与智能系统配置?18字教程
宝塔建站教程:一键部署配置流程与SEO优化实战指南
如何打造高效商业网站?建站目的决定转化率
公司网站设计制作厂家,怎么创建自己的一个网站?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
如何在IIS7上新建站点并设置安全权限?
如何选择可靠的免备案建站服务器?
如何用已有域名快速搭建网站?
文字头像制作网站推荐软件,醒图能自动配文字吗?
建设网站制作价格,怎样建立自己的公司网站?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
网站app免费制作软件,能免费看各大网站视频的手机app?
网站制作多少钱一个,建一个论坛网站大约需要多少钱?
网站企业制作流程,用什么语言做企业网站比较好?
深圳网站制作平台,深圳市做网站好的公司有哪些?
宿州网站制作公司兴策,安徽省低保查询网站?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
教程网站设计制作软件,怎么创建自己的一个网站?
建站上传速度慢?如何优化加速网站加载效率?
如何基于云服务器快速搭建个人网站?
php json中文编码为null的解决办法
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
建站DNS解析失败?如何正确配置域名服务器?
定制建站哪家更专业可靠?推荐榜单揭晓
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
网站制作企业,网站的banner和导航栏是指什么?
PHP 500报错的快速解决方法
广州建站公司哪家好?十大优质服务商推荐
*请认真填写需求信息,我们会在24小时内与您取得联系。