今日目标(AQS):
AQS(抽象队列同步器):
相当于实现锁的一系列模板方法。
如果要实现锁,需要:
1.锁是否被占用的状态值。
2.阻塞/唤醒
3.竞争失败的队列
AQS中:
state:状态信息,不同的锁的用途不同
Node:阻塞队列等的节点信息(pre,next,thread)都是用volatile进行修饰。thread直接放入队列不好,用节点来代替。
阻塞唤醒:使用LockSupport中的工具类方法
当前持有锁的线程:使用了抽象类AbstractOwnableSynchronizer,进行getset
1.CLH队列的实现
SMP(对称多处理器结构),保证CPU的内存一致性,但是可能内存访问冲突和资源浪费。
NUMA(非一致存储访问),将CPU分模块,每个模块多CPU组成,具有独立本地内存和插槽进行互联互通。本地内存的速度远高于系统其他节点的内存速度。
普通的自旋锁:
对某一原子变量,例如当前线程的原子变量,进行循环执行CAS操作,直到成功。
但是!自旋锁在激烈的锁竞争下,性能差,且如果竞争剧烈可能会被插队导致饥饿。
CLH锁其实是对自旋锁的一种改良。
2.性能为什么高
3.入队列过程?为什么先自旋?
4.Semopher是什么?限流可以用吗?
5.ReentrantLock?与Synchronized有什么区别?释放阻塞的指定线程?为什么finally释放?
标签:乔亚,AQS,队列,玛丽,CPU,线程,内存,自旋,Day From: https://www.cnblogs.com/dwj-ngu/p/17201912.html