0
点赞
收藏
分享

微信扫一扫

Disruptor本地线程队列--是什么决定了批量数据的多少_什么决定了endofBatch是true还是false---线程间通信工作笔记006


     由于我们要做一个功能,因为数据的获取,并不是匀速的,而是不定的,数据会不停的,非匀速的,

 

类似无界流,不停的过来数据,我们需要让数据在队列中,每个一个固定的时间,或者固定的数量,来保存一次,而每次保存会根据endofbatch,disruptor的endofbatch来进行保存一次,当endofbatch是true的时候就需要进行一次,数据的保存,生成一个数据文件.

    那么虽然是数据每隔一段时间过来的,或者是每隔固定数量的数据过来的,这里,出现了一个问题,

就是如果数据是每隔一定固定数量过来的,那么出现了问题,如果比如数据是每100条就会存一次,也就是,如果数据:dataIndex - ringbuffer.getCursor,这个游标是100了,大于等于100了,就进行,publish.

ringBuffer.publish(ringBuffer.getCursor,dataIndex).发布一次数据,数据消费端就会立刻进行数据保存,但是如果数据,每隔100,每隔100,来的数据太快了,那么就会出现,一个文件,保存了200条数据的情况,也就是,本来每隔100,过来100条的,也就是每隔100,endofbatch就是true一次,但是虽然每隔100进行发布一次数据,但现在出现了,200条才endofbatch才是true一次.这是什么原因呢?

      是什么决定了endofbatch的,true还是false,经过多次测试,知道,就是发布数据publish数据的,间隔,如果时间间隔太近,比如小于300毫秒,那么可能这个过程,虽然是分了两次publish的数据,但是这个过程中,endofbatch可能一直都是false,所以修改办法很简单,就是在publish数据的时候,先进行,

TimeUnit.MILLISECONDS.sleep(300),测试过了,必须大于等于300毫秒,才能区分开,不同机器配置可能不一样,需要自己配置.

    关于我们设计的这个自动保存数据的disruptor的结构会在另一个文章中说.

Disruptor本地线程队列--是什么决定了批量数据的多少_什么决定了endofBatch是true还是false---线程间通信工作笔记006_java

举报

相关推荐

0 条评论