计算器sequence超过 Long.MAX_VALUE怎么办?

2012年03月05日 16:51 "@yangjun2"的内容
计算器sequence超过 Long.MAX_VALUE怎么办 ...

什么情况?

batchEventProcessor.getSequence().set(Long.MAX_VALUE);
Thread thread = new Thread(batchEventProcessor);
thread.start();
//for(long i=0;i<Long.MAX_VALUE;i++) {
//ringBuffer.publish(ringBuffer.next());
ringBuffer.forcePublish(Long.MAX_VALUE);


后续batchEventProcessor的sequence无法继续+1了。

2012年03月05日 17:26 "@yangjun2"的内容
batchEventProcessor.getSequence().set(Long.MAX_VALUE) ...

不懂用法,batchEventProcessor是放入Event handler的,一般没有那么多Handler吧,几个几十个就不得了。

"生产者和消费者,这就具备了资源争夺的前提,这两个线程一般彼此守在队列的进出两端,表面上好像没有访问共享资源,实际上队列存在两个共享资源:队列大小或指针.
因为一个CPU只能访问(写)自己高速缓存区中数据,相当于给这个数据加锁,那么另外一个CPU同时访问前一个的高速缓冲中同样数据时将会被锁定不能访问。
尽管两个线程是在写两个不同的字段值,也会因为双核CPU底层机制发生伪装的共享,并没有真正共享,其实还是排他性的独享。"


[该贴被pingyuyue于2012-03-20 09:20修改过]

false shareing 不同机器机器缓存行的大小可能不一样

[该贴被pingyuyue于2012-03-18 10:36修改过]

"逻辑处理完毕后结果输出到output Disruptor后又是怎么给到客户端的?"---------好像没有回答。

浏览器用户如何取结果?

2014-01-23 18:56 "@janix"的内容
逻辑处理完毕后结果输出到output Disruptor后又是怎么给到客户端的 ...

这是一个异步返回的问题,可见这个帖子:
http://www.jdon.com/46042/5#23144284