计算机两大定律
摩尔定律:CPU晶体管数量的变化趋势
Amdahl定律:并行计算与串行计算的比例来提高效率
计算机体系结构最基本特点是一根总线串联硬件,每个硬件都由控制器和CPU相连。
总线只是把硬件串联起来,但是不能保证这些硬件能协调工作。比如CPU的速度比存取内存,硬件IO和网络IO快得多。
这就需要缓存把各个硬件协调起来。缓存的出现带来了缓存一致性问题。
Java内存模式JMM
每个线程都有自己的工作内存,里面存放主内存数据的副本,线程只是处理工作内存中的副本,然后同步到主内存中去。
并发的三种特性
1)原子性:基本数据类型的访问是需要原子性的,更大范围的原子性则需要锁。
2)可见性:某线程修改某变量,其他变量能及时看到
synchronized, volatile, final
3)有序性:synchronized, volatile(禁止指令重排序优化)
调度:OS为线程分配CPU的使用权
1)协同式调度:线程执行时间由线程自己决定
2)抢占式调度:OS分配线程执行时间
线程安全
1)互斥同步:锁(及其条件变量)
锁的优化:自旋锁(避免线程上下文切换,但自旋时间不好控制),锁的粒度,轻量级锁,
偏向锁
2)无阻塞同步 CAS:依靠硬件指令
缺点是ABA问题,解决方案是AtomicStampedReference类控制变量值的版本。
3)无锁编程:ThreadLocal