Selector数量问题

来源:12-2 单机百万连接模拟与瓶颈

Netty0

2019-07-04

NioEventLoop在构造函数中会open一个Selector并保存下来

selector = provider.openSelector();
  • 那么是不是一个NioEventLoop就对应一个Selector?假设处理器 * 2 = 16,那么就是有16个NioEventLoop,随之开启16个selctor实例?还是一个NioEventLoopGroup下的所有子NioEventLoop共享一个selector?

  • 个人拙见一个NioEventLoop就会对应一个Selector,那么在NioEventLoop 中的run方法,调用selector.wakeup()这个方法唤醒selector是有什么用意吗?只会有一个线程去调用selector.select()被阻塞(因为一个selector对应一个NioEventLoop对应一个线程),这个线程被阻塞又怎么抽开身去唤醒,那么可以视为selector.wakeup()并不是为了唤醒被阻塞的NioEventLoop线程,那么是为了什么呢?

感谢老师花时间阅读我的问题,感谢回答!

写回答

1回答

闪电侠

2019-07-08

  1. 一个 NioEventLoop 对应一个 selector;

  2. NioEventLoop 对应的线程部分逻辑会阻塞去等待事件发生,而这个时候如果外部线程调用 NioEventLoop.submit(xx),这个时候,NioEventLoop 需要 wakeup

0
1
Netty0
感谢老师^^
2019-07-09
共1条回复

Java读源码之Netty深入剖析

解析netty各大组件细节,百万级性能调优,设计模式实际运用

2334 学习 · 283 问题

查看课程