эр, вот вопрос о Нетти nioWorker Netty architecture - questions about NioWorker loopНетти архитектура - вопросы о NioWorker петле снова
, но у меня есть другой фокус, я обнаружил, что
processRegisterTaskQueue();
processEventQueue();
processWriteTaskQueue();
хотя эти три очереди contians Runnable типа , Но метод call run()
private void processWriteTaskQueue() throws IOException {
for (;;) {
final Runnable task = writeTaskQueue.poll();
if (task == null) {
break;
}
task.run();
cleanUpCancelledKeys();
}
}
Это означает, что очереди на очереди синхронизированы, возможно слишком длинные очереди обработчиков и не может сделать processSelectedKeys вовремя?
, кстати, когда я пишу данные, Нетти передать данные в writeBufferQueue и нажмите задачу записи в writeTaskQueue, то обработчик задачи, когда выполнение processWriteTaskQueue
if (channel.writeTaskInTaskQueue.compareAndSet(false, true)) {
// "add" the channels writeTask to the writeTaskQueue.
boolean offered = writeTaskQueue.offer(channel.writeTask);
assert offered;
}
почему бы не обрабатывать данные в потоке Niowork напрямую, например processWriteBufferQueue()?
Может ли кто-нибудь объяснить? спасибо