- 博客(3)
- 收藏
- 关注
原创 JUC中的CAS、ABA问题
首先介绍一下Unsafe类,它是调用硬件层面的一个原子类,而CAS在该类中则有实现,类中 有使用native修饰的开头的方法,使用的就是CAS技术,该方法调用C++中的cmpxchg的指令,C++的cmpxchg又回去调用CPU的cmpxchg指令,所以CAS是CPU支持的一种指令,CPU会进行判断如果是多核操作情况下还会加上lock指令,lock指令是CPU层面的锁,一般锁的粒度是缓存行级别。
2023-03-26 02:28:13
86
1
原创 RabbitMQ惰性队列
使用场景:消费者宕机、维护关闭 导致 消息堆积时默认情况下,消息是存储在内存中,使用惰性队列(lazy)可以将消息保存在磁盘中,减少内存开销,防止消息丢失,避免因消费者宕机,消息堆积,在3.6.0之前的版本无序做任何更改。惰性队列会把消息缓存在磁盘中,内存中保留对应的索引,需要消费这些消息的时候再通过索引到磁盘中读取惰性队列比较慢,需要根据内存中的索引到磁盘读取消息可以通过调用cannel.queueDeclare方法的时候在参数中设置,也可以通过policy的方式设置。
2022-11-06 02:50:52
627
原创 Redis实现分布式锁
实现分布式锁原则:为了确保分布式锁可用性,锁实现的同时至少同时需要满足以下四个条件:1.互斥性:在任意时刻,只有一个客户端能持有锁,使用SET NX实现2.避免死锁:即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端加锁,设置TLL过期时间实现3.解铃还须系铃人: 解锁和解锁必须是同一个客户端,客户端不能出现把别人加的锁解了的情况,使用UUID实现4. 原子性: 加锁解锁必须具有原子性,使用lua脚本实现。
2022-10-21 02:07:35
276
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人