更快的AtomicInteger
更快
2023-09-11 14:16:10 时间
以incrementAndGet为例,在非常高的并发下,compareAndSet会很大概率失败,因此导致了此处cpu不断的自旋,对cpu资源的浪费
既然知道此地是高并发的瓶颈,有什么办法呢?
很简单,当cas失败后,对线程park,减少多线程竞争导致的频繁cas失败,更进一步的导致cpu自旋,浪费cpu的运算能力。在4核虚拟机,Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz linux 2.6.32,(注意,老版本的内核,不支持高的精度ns级) 进行测试,同样都起4个线程,每个线程里面对AtomicInteger进行5kw次的incrementAndGet。原生的AtomicInteger,耗时14232ms,进行了35870次上下文切换,总共87967770955次时钟周期。那prak 1ns下呢,耗时5195ms,进行了19779次上下文切换,总共36187480878次时钟周期,明显性能上比原生的AtomicInteger更好,那这个park多少合适呢?那就只有人肉测试了
本机环境下,park 1ms下,相对耗时,cs次数来说是最好的。因此这种优化要达到最佳效果,还要看cpu的情况而定,不是一概而定的
两个问题:
1、cas失败对线程park的副作用是什么。
2、如果park的时间继续加大,那会是这么样的结果呢。
文章转自 并发编程网-ifeve.com
ArrayList和LinkedList使用不当,性能差距会如此之大! ArrayList实现了List接口,继承了AbstractList抽象类,底层是数组实现的,并且实现了自增扩容数组大小。ArrayList还实现了Cloneable接口和Serializable接口,所以他可以实现克隆和序列化。ArrayList还实现了RandomAccess接口,这个接口是一个标志接口,他标志着“只要实现该接口的List类,都能实现快速随机访问”。基本属性ArrayList属性主要由数组长度size、对象数组elementData、初始化容量default_capacity等组成, 其中初始化容量默认大小为10。//默认初始化容量private static final
相关文章
- 让容器应用管理更快更安全,Dragonfly 发布 Nydus 容器镜像加速服务
- 新型序列化类库MessagePack,比JSON更快、更小的格式
- 使用tar+lz4/pigz+ssh更快的数据传输
- 使用tar+lz4/pigz+ssh更快的数据传输
- Velocity.js发布:更快的动画切换速度
- zabbix server 在配置客户端的时候 在zabbix server端的/etc/hosts文件的hostname 对应的ip这样可以更快的让server端发现agent端
- 新型序列化类库MessagePack,比JSON更快、更小的格式
- 使用tar+lz4/pigz+ssh更快的数据传输
- 使用tar+lz4/pigz+ssh更快的数据传输
- 假如 UNION ALL 里面的子句 有 JOIN ,那个执行更快呢
- 无惧百万级并发,GaussDB(for Cassandra)让华为推送服务更快触达
- Serverless冷启动:如何让函数计算更快更强?
- 更快地编写更好的代码:5 分钟阅读
- 程序员如何让自己更快的废掉?
- 你的以太网速度足够快吗?四种更快的速度正在路上······
- VS2022 性能提升:更快的 C++ 代码索引
- VS2019更新:更快的C++工程迭代构建
- 【博客601】本地通信使用127.0.0.1会比使用本地ip更快吗?
- YoloV8改进策略:将FasterNet与YoloV8深度融合,打造更快更强的检测网络
- 人脸检测进阶:更快的5点面部标志检测器
- 全网独家首发|极致版YOLOv7改进大提升(推荐)网络配置文件仅24层!更清晰更方便更快的改进YOLOv7网络模型
- EasyCV带你复现更好更快的自监督算法-FastConvMAE