代码地址
个人思考下来,它适合一切异步环境,但是对于并发量小的场景不一定需要。在log4j2中,已经使用了disruptor进行日志记录。同样是用异步,选择disruptor会更快。
在一些获取验证码,发短信的场景下,对实时性要求不够,如果收不到,用户可以再次要求重发。
对于一些奖品,卡券的发放,在高峰期,可以只入队,在之后用异步的方式慢慢发放。
对于比较复杂的逻辑可以进行并发操作
disruptor作为一个高并发框架,从CPU层面对整个代码进行优化。具有如下特点
队列使用数组结构,而不是使用传统的链表结构,寻址更快
新生产的对象采用覆盖的方式(不是传统阻塞队列,删除->添加的逻辑),减少GC回收的负担
从CPU层面优化,对Sequencer进行内存分配补齐,消除Java伪共享(cpu缓存行)
多个线程同时访问,由于他们都通过序号器Sequencer访问ringBuffer,通过CAS取代了加锁和同步块,这也是并发编程的一个指导性原则:把同步块最小化到一个变量上。
False Sharing
Getting-Started
Q1:通过Sequencer产生的序列号,一直处于自增状态,是否会爆掉
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-34283-4.html
项目标准什么都没跟上