天天看點

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資料的時候,先進行,