美文网首页
如何用伪共享打造高并发、高性能的系统

如何用伪共享打造高并发、高性能的系统

作者: 自天佑之吉无不利 | 来源:发表于2023-10-22 23:23 被阅读0次

伪共享(False Sharing)是高并发系统需要重点关注和优化的点。在计算机科学中,伪共享是多线程环境里的一种性能损失现象,当多个线程访问并修改处于同一缓存行内的不同数据时,会导致这个缓存行不断地在各个线程对应的缓存中切换,从而大大降低了系统性能,这就是所谓的伪共享现象。

在计算机中,缓存(Cache)用于协调速度差异较大的两种硬件之间数据传输速度的差异。例如,CPU 和主存之间就有 cache 进行协调,这种存在于硬件中的 Cache 常见的有 CPU Cache、GPU Cache 等;同时在软件中也有类似的存在,比如 Web Cache。

伪共享出现的主要原因在于硬件设计。每次缓存操作,CPU 并不是直接与主存交互,而是以缓存行为单位在主存和缓存间传递数据。如果多个线程同时修改一块内存区域的不同部分,并且这部分内存在同一缓存行内,那么即使这些修改本身无需同步,由于保存这些部分的缓存行会频繁地被标记为无效和重新读取,就会引起伪共享。

如何检测伪共享?

针对伪共享,硬件提供了特定的性能计数器来记录缓存行的命中次数和缓存行失效的次数。

另外,编程语言和特定的编程库也提供了相应的工具和方法来帮助我们检测和解决伪共享问题。例如,在 Java 中你可以使用 ThreadMXBean 接口,这是 Java 虚拟机的管理接口,可以用来监控虚拟机的线程和系统的状态。

如何解决伪共享问题?

解决伪共享的基本思路是尽量让各线程修改的内存不落在同一个缓存行上。常用的解决办法有 3 种。

  1. 数据对齐:通过数据对齐,可以将多线程操作的数据对齐到缓存行的边界,这样就不会出现一个缓存行上存在两个线程操作的数据的情况。这是最直接和最有效的解决办法。
  2. 数据隔离:在多线程操作的数据之间插入若干无用数据,使这些数据占用多个缓存行,从而避免伪共享。这种办法的缺点是会浪费大量内存。
  3. 使用无锁数据结构:一些设计良好的无锁数据结构,如队列、栈、大部分无锁哈希表等,从设计之初就已考虑到了避免伪共享的问题。使用这些数据结构可以在一定程度上避免伪共享。
image.png

缓存是计算机用来管理、协调不同速度硬件间数据传输差异的工具,这意味着它充当了 CPU 和主存之间的“中介”,来提高数据读取和写入的速度。缓存行则是 CPU 高速缓存中存储数据的单位。如果多个线程试图修改存在于同一个缓存行的不同数据,可能会导致所谓的伪共享现象,从而降低系统的整体性能。为了避免这一问题,我们可以采用数据对齐、数据隔离或使用无锁数据结构的方法。

特定的编程库和语言,如 Java 和 Disruptor,也提供了工具和方法来解决这一问题。在 Disruptor 中,每个数据项被一定长度的“填充”隔离开,确保每个数据项独立存在于不同的 Cache Line 中,从而提高了数据的并行访问效率。

此文章为10月Day17学习笔记,内容来源于极客时间《云时代的JVM》,强烈推荐该课程

相关文章

  • 秒杀系统开发(一)

    本文部分内容来自 【PHP秒杀系统 高并发高性能的极致挑战】 目标 如何设计和实现秒杀系统? 实现系统的高并发、高...

  • 03 如何提升系统性能?

    高并发系统设计的三大目标:高性能、高可用、可扩展高并发承担更大的流量。性能反映了系统的使用体验。可用性表示系统可以...

  • 一文了解高性能架构和系统设计经验

    高性能架构和系统设计经验 高性能和高并发,听着就有点类似,并且他们还经常一起提及,比如提高我们的并发性能,显然,高...

  • 2021年阿里巴巴Java百亿级并发系统设计笔记(全彩版)

    首先我们要了解高并发系统设计的三大目标:高性能、高可用、可扩展 高并发,是指运用设计手段让系统能够处理更多的用户并...

  • 秒杀系统设计-学习笔记

    秒杀系统的设计体现了对高并发、高可用、高性能的软件系统的掌握;处理并发能力越强,接受的业务能力越强,那么盈利也就越...

  • 服务三高

    三高定义 高并发、高性能、高可用 1.1高并发与高性能的关系 高并发指的是机器的并发连接数。如果静态的看待,就是一...

  • 常见系统架构设计

    feed流设计 如何打造千万级Feed流系统Feed 流系统设计总纲 秒杀类的高并发设计 高并发系统的设计及秒杀实...

  • 2019-07-16

    高性能,高并发,高可用

  • 2019-01-30关于高并发和秒杀系统

    关于高并发和秒杀系统,你知道的和不知道的一些事 这篇文章也算是对于课程 《PHP秒杀系统 高并发高性能的极致挑战》...

  • 秒杀系统架构原则

    秒杀系统架构原则 “四要一不要” 秒杀系统的本质是满足高并发、高性能和高可用的分布式系统。秒杀系统的架构原则总结为...

网友评论

      本文标题:如何用伪共享打造高并发、高性能的系统

      本文链接:https://www.haomeiwen.com/subject/jlmdidtx.html