CPU Notes
来源:互联网 发布:淘宝新店引流量 编辑:程序博客网 时间:2024/06/07 21:55
Cache Line可以简单的理解为CPU Cache中的最小缓存单位。目前主流的CPU Cache的Cache Line大小都是64Bytes。假设我们有一个512字节的一级缓存,那么按照64B的缓存单位大小来算,这个一级缓存所能存放的缓存个数就是512/64 = 8个
http://cenalulu.github.io/linux/all-about-cpu-cache/对于伪共享,我们在实际开发中该怎么做
首先就是多次强调的,伪共享是很隐蔽的,我们暂时无法从系统层面上通过工具来探测伪共享事件。其次,不同类型的计算机具有不同的微架构(如 32 位系统和 64 位系统的 java 对象所占自己数就不一样),如果设计到跨平台的设计,那就更难以把握了,一个确切的填充方案只适用于一个特定的操作系统。还有,缓存的资源是有限的,如果填充会浪费珍贵的 cache 资源,并不适合大范围应用。最后,目前主流的 Intel 微架构 CPU 的 L1 缓存,已能够达到 80% 以上的命中率。
综上所述,并不是每个系统都适合花大量精力去解决潜在的伪共享问题。
http://www.cnblogs.com/cyfonly/p/5800758.htmlCAS操作比单线程无锁慢了1个数量级;有锁且多线程并发的情况下,速度比单线程无锁慢3个数量级。可见无锁速度最快。
单线程情况下,不加锁的性能 > CAS操作的性能 > 加锁的性能。
在多线程情况下,为了保证线程安全,必须使用CAS或锁,这种情况下,CAS的性能超过锁的性能,前者大约是后者的8倍。
CAS是CPU的一个指令,由CPU保证原子性
disruptor在需要保证线程安全的地方,用到了CAS操作,这是一个CPU级别的指令,类似于乐观锁,即Campare and Set/Swap. JAVA 从1.5版本新引入了AtomicLong等支持CAS指令的数据结构。Disruptor通过精巧的无锁设计实现了在高并发情形下的高性能。
http://tech.meituan.com/disruptor.html
Disruptor通过以下设计来解决队列速度慢的问题:- 环形数组结构
为了避免垃圾回收,采用数组而非链表。同时,数组对处理器的缓存机制更加友好。 - 元素位置定位
数组长度2^n,通过位运算,加快定位的速度。下标采取递增的形式。不用担心index溢出的问题。index是long类型,即使100万QPS的处理速度,也需要30万年才能用完。 - 无锁设计
每个生产者或者消费者线程,会先申请可以操作的元素在数组中的位置,申请到之后,直接在该位置写入或者读取数据。
- 环形数组结构
- CPU Notes
- Notes for Oracle Database PSU/CPU
- Notes: CPU and Memory of O.S.
- Notes
- notes
- Notes
- notes
- notes
- notes
- notes
- Notes
- notes
- Notes
- notes
- Notes
- notes
- Notes
- Notes
- 尾递归以及在浏览器中的实现
- MySQL事务隔离级别和Spring事务关系介绍
- 【数据结构与算法】 一些知识点零零总总(引用网络知识点节选重组)
- HiveQL:数据定义
- 109. Convert Sorted List to Binary Search Tree
- CPU Notes
- tomcat注册为系统服务后,项目无法启动或者启动后页面中文乱码
- UVA12100 Printer Queue 【双端队列】
- Android学习笔记之蓝牙通信...
- SVG(可缩放矢量图形)绘制工具Method Draw
- docker原理及基本概念
- 问题四十二:怎么用ray tracing画任意圆环片段
- 【JZOJ 3854】分组
- 程序员面试金典——解题总结: 9.12测试 12.3如何测试国际象棋程序中的移动方法?