2012-06-13 2 views
0

эр, вот вопрос о Нетти 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()?

Может ли кто-нибудь объяснить? спасибо

ответ

0

В этом посте есть два вопроса.

Первый вопрос: возможно ли, что очереди обработчиков слишком длинные и не могут сделать process SelectKeys() вовремя?

Да. Однако, похоже, это не происходит, если ваша реализация обработчика не злоупотребляет умышленно.

Второй вопрос: почему операция записи всегда выполняется в потоке цикла ввода-вывода?

В противном случае 1) вы увидите много противоречий между потоками писателя, если вы пишете из разных потоков, 2) вы увидите различные исключения сокетов из-за возможных условий гонки (сброс соединения и т. Д.) И 3) Внутренняя внутренняя усложняются для решения таких условий.

Обратите внимание, что модель нитей стала более строгой, а реализация цикла событий стала намного проще в Netty 4, поэтому вы можете также взглянуть туда.

Смежные вопросы