关于 Netty NioEventLoop 的一些疑惑
Posted
技术标签:
【中文标题】关于 Netty NioEventLoop 的一些疑惑【英文标题】:Some doubts about Netty NioEventLoop 【发布时间】:2022-01-21 19:09:39 【问题描述】:Netty 版本 4.1.1.7 最终版。我想知道 if 的用途是什么以及为什么在处理任务之前必须选择#selectNow。
// io.netty.channel.nio.NioEventLoop#select
private void select(boolean oldWakenUp) throws IOException
// ...
for (;;)
long timeoutMillis = (selectDeadLineNanos - currentTimeNanos + 500000L) / 1000000L;
if (timeoutMillis <= 0)
if (selectCnt == 0)
selector.selectNow();
selectCnt = 1;
break;
// ...
【问题讨论】:
【参考方案1】:如果到达此行,则已决定选择操作不应等待某些 Channel
/ SelectionKey
准备好或等待超时。
但对于selector
上的进一步操作,了解哪些Channel
s 已准备好处理并因此更新SelectionKey
s 仍然很重要。
这就是Selector.selectNow()
所做的:
选择一组键,其对应通道已准备好进行 I/O 操作。
此方法执行非阻塞选择操作。如果自上次选择操作以来没有通道成为可选通道,则此方法立即返回零。
【讨论】:
以上是关于关于 Netty NioEventLoop 的一些疑惑的主要内容,如果未能解决你的问题,请参考以下文章
Netty的NioEventLoop和NioEventLoopGroup是什么关系?