呃,这里有一个关于netty nioWorker Netty架构的问题——关于NioWorker循环的问题
但我有不同的关注点,我发现
processRegisterTaskQueue();
processEventQueue();
processWriteTaskQueue();
虽然这三个队列包含 Runnable 类型,但是调用了 run() 方法
private void processWriteTaskQueue() throws IOException {
for (;;) {
final Runnable task = writeTaskQueue.poll();
if (task == null) {
break;
}
task.run();
cleanUpCancelledKeys();
}
}
表示handle queues同步,可能handler queues太长,无法及时处理processSelectedKeys?</p>
顺便说一下,当我写数据的时候,netty把数据推到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()?
有人可以解释一下吗?谢谢