ええと、これは netty nioWorker Netty アーキテクチャに関する質問です - NioWorker ループに関する質問
しかし、私は別の焦点を持っています、私はそれを見つけました
processRegisterTaskQueue();
processEventQueue();
processWriteTaskQueue();
この 3 つのキューには Runnable 型が含まれていますが、run() メソッドを呼び出します
private void processWriteTaskQueue() throws IOException {
for (;;) {
final Runnable task = writeTaskQueue.poll();
if (task == null) {
break;
}
task.run();
cleanUpCancelledKeys();
}
}
これはハンドル キューが同期されていることを意味します。ハンドラー キューが長すぎる可能性があり、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;
}
processWriteBufferQueue() など、Niowork ループで直接データを処理しないのはなぜですか?
誰か説明できますか?ありがとう