40.原子累加器

2024-04-16 00:28
文章标签 原子 40 累加器

本文主要是介绍40.原子累加器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

java8之后,新增了专门用于计数的类,LongAccumulator,LongAdder的性能高于AtomicLong。

LongAdder 性能 > AtomicLong 性能

性能高的原因:如果都往一个共享变量上面进行累加,那么比较重试的次数肯定就多;如果分成几个变量分别进行累加就优化了。在竞争时设置了多个累加单元。Thread-0累加Cell[0],而Thread-1累加Cell[1]....最后将结果汇总。这样它们在累加时操作不同的Cell变量,因此减少了CAS重试失败,从而提高性能。

cells 累加单元数组,懒惰初始化

base 基础值,如果没有竞争,则用cas累加这个阈

在cells 创建或者扩容时,置为1,表示加锁。

Cell类的源码:

@sun.misc.Contended注解,防止缓存行伪共享

缓存的加入会造成数据副本的产生,即同一份数据会缓存在不同核心的缓存行中。

CPU要保证数据的一致性,如果某个CPU核心更改了数据,其他CPU核心对应的整个缓存行必须失效。

这篇关于40.原子累加器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/907338

相关文章

Lua 脚本在 Redis 中执行时的原子性以及与redis的事务的区别

在 Redis 中,Lua 脚本具有原子性是因为 Redis 保证在执行脚本时,脚本中的所有操作都会被当作一个不可分割的整体。具体来说,Redis 使用单线程的执行模型来处理命令,因此当 Lua 脚本在 Redis 中执行时,不会有其他命令打断脚本的执行过程。脚本中的所有操作都将连续执行,直到脚本执行完成后,Redis 才会继续处理其他客户端的请求。 Lua 脚本在 Redis 中原子性的原因

Redis 篇-深入了解基于 Redis 实现分布式锁(解决多线程安全问题、锁误删问题和确保锁的原子性问题)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录         1.0 分布式锁概述         1.1 Redis 分布式锁实现思路         1.2 实现基本的分布式锁         2.0 Redis 分布式锁误删问题         2.1 解决 Redis 分布式锁误删问题         3.0 Redis 分

科研小白成长记40——第三个五年计划

小gap期间,拼命玩和拼命休息的同时,仔细思考了下我期望的五年之后的样子,gap结束,算是目标愈发清晰起来。曾经,读博的目标是成为一名independent researcher,并且具备发至少一篇顶会的能力。而现在,希望五年后的自己,成为一名good independent researcher。当然,这里的good,根据现阶段的科研榜样,已经有了具体的metrics。 首先是随时在线的深度理解

javaweb-day02-2(00:40:06 XML 解析 - Dom4j解析开发包)

导入dom4j开发包:dom4j-1.6.1.jar   在工程下建一个文件夹lib,将dom4j-1.6.1.jar拷到里边。右键add to build path。  dom4j-1.6.1\lib文件夹下还有一些jar包,是开发过程中dom4j所需要依赖的jar包,如开发过程中报错,则需导入。   用dom4j怎么做呢? 只要是开源jar包提供给你的时候,它会在开源包里面提供

多线程篇(并发相关类- 原子操作类)(持续更新迭代)

目录 前言 一、原子变量操作类(AtomicLong为例) 1. 前言 2. 实例 二、JDK 8新增的原子操作类LongAdder 三、LongAccumulator类原理探究 前言 JUC包提供了一系列的原子性操作类,这些类都是使用非阻塞算法CAS实现的,相比使用锁实现原子性操作这在性能上有很大提高。 由于原子性操作类的原理都大致相同,这里讲解最简单的AtomicLo

【Java编程的逻辑】原子变量 CAS 显示锁

原子变量 在理解synchronized中有使用synchronized保证原子更新操作,但是使用synchronized成本太高了,需要先获取锁,最后还要释放锁,如果获取不到锁还需要等到。这些成本都是比较高的,对于这种情况,可以使用原子变量。 Java并发包中的基本原子变量类型有以下几种: AtomicBoolean:原子Boolean类型,常用来在程序中表示一个标志位 AtomicIn

windows下nginx+php配置(win2008+nginx1.7.12+php5.4.40)

下载php5.4.40 下载的时候注意是nts版本 地址:http://windows.php.net/downloads/releases/php-5.4.40-nts-Win32-VC9-x86.zip 下载nginx1.7.12  地址:http://nginx.org/download/nginx-1.7.12.zip 下载RunHiddenConsole.zip 作用是运行时隐

正点原子阿尔法ARM开发板-IMX6ULL(二)——介绍情况以及汇编

文章目录 一、裸机开发(21个)二、嵌入式Linux驱动例程三、汇编3.1 处理器内部数据传输指令3.2 存储器访问指令3.3 压栈和出栈指令3.4 跳转指令3.5 算术运算指令3.6 逻辑运算指令 一、裸机开发(21个) 二、嵌入式Linux驱动例程 三、汇编 我们在进行嵌入式 Linux 开发的时候是绝对要掌握基本的 ARM 汇编,因为 Cortex-A 芯片一

CAS与原子操作

什么是原子操作? 原子操作是一种在执行过程中不会被中断的操作。它要么完全执行成功,要么完全不执行,确保在操作完成之前其他线程不会看到操作的中间状态。 原子操作的实现 CAS CAS是由 CPU 提供的原子指令。在硬件级别上确保操作的原子性。不涉及上下文切换,性能高主要用途:单个变量更新 posix锁机制:mutex互斥锁、spinlock自旋锁 互斥锁依赖CAS,且涉及上下文切换,开销大

数据库系统 第40节 数据库安全策略

数据库安全策略是确保数据库系统安全、防止数据泄露和未授权访问的关键措施。以下是一些常见的数据库安全策略,以及它们在实际应用中的一些示例。 1. 访问控制 访问控制是数据库安全的基础,它确保只有授权用户才能访问数据库资源。这通常通过以下方式实现: 用户名/密码:用户必须提供有效的用户名和密码才能登录数据库。角色和权限:用户被分配到特定的角色,每个角色都有一组权限,这些权限定义了用户可以执行的操