Netty体系结构-关于NioWorker循环的问题
我正在研究niowerner.run()方法,并试图了解它是如何工作的。 以下是代码的简化版本:Netty体系结构-关于NioWorker循环的问题,netty,Netty,我正在研究niowerner.run()方法,并试图了解它是如何工作的。 以下是代码的简化版本: for(;;) { try { SelectorUtil.select(selector); if (wakenUp.get()) { selector.wakeup(); } cancelledKeys = 0; processRegisterTaskQ
for(;;) {
try {
SelectorUtil.select(selector);
if (wakenUp.get()) {
selector.wakeup();
}
cancelledKeys = 0;
processRegisterTaskQueue();
processWriteTaskQueue();
processSelectedKeys(selector.selectedKeys());
} catch (Throwable t) {
}
}
更不清楚的是,它的作用是什么,但我有一些问题:
1.选择器。选择(选择器)以500毫秒超时执行选择。
为什么它不仅仅是一个阻塞呼叫
2.以下片段的目的是什么?为什么我们需要进行唤醒
if (wakenUp.get()) {
selector.wakeup();
}
提前谢谢
[1] 1。据我所知,阻塞选择器将在新连接到达时解除阻塞,因此您不必进行基于时间的调用,即可调用processRegisterTaskQueue。2.附件中的注释仅讨论wakenUp.get()。我想知道为什么必须唤醒选择器?是否有多个线程使用选择器?在boss线程上,可以使用IO工作线程处理连接所使用的选择器的单独选择器来接受新连接。从boss选择器到IO工作者选择器的切换由boss线程处理,将任务放置在队列上,向IO工作者注册新通道,然后由IO工作者处理。必须唤醒IO工作者以处理队列。