поэтому у меня есть код:
private void schedule(....) {
long s = m_ringBuffer.next();
.....
m_logger.info("1 [{}]", s);
m_ringBuffer.publish(s);
.....
}
private void run(){
.....
while(true){
...
final long availableSequence = m_barrier.waitFor(nextSequence);
while (nextSequence <= availableSequence) {
m_logger.info("2 [{}] [{}]", nextSequence, availableSequence);
Task t = m_ringBuffer.get(nextSequence);
m_logger.info("3");
...
}
}
}
.... 9 из 10 раз быстро, но у меня были бы случаи типа
13:35:46.365 [Thread-1] INFO App - 1 [44905]
13:35:46.380 [Thread-2] INFO App - 2 [44905] [44905]
13:35:46.380 [Thread-2] INFO App - 3
Я использую BusySpinWaitStrategy и понятия не имею, что происходит в этих 15 миллис ... и кольцевой буфер пуст.
Мой поток 1 и поток 2 прикреплены к их изолированному процессору.
Есть ли какой-нибудь системный инструмент Linux, который позволит мне отладить это или посмотреть, что делают UNSAFE.get и UNSAFE.putOrderedInt? (похоже, что strace не помогает, и он медленный)
Мое приложение также использует несколько очередей Chronicle, поэтому я не уверен, что там есть какие-либо "столкновения", поскольку в Chronicle повсюду есть небезопасные вызовы.
Моя версия Disruptor - 3.4.2 с использованием Java 8.
Большое спасибо!