netty的组件EventLoop中一个Selector包含多少个channel?

Netty 的服务端是业务代码处理逻辑是由 WorkerGroup 来完成的,而 WorkerGroup 是由多个 EventLoop 构成的。

一个 EventLoop 持有一个 Selctor,而一个 Selector 可以管理多个 Channel。

EventLoop 的个数可以由构造函数决定,那么 EventLoop 里面包含的 Channel 个数是多少,由谁决定?

阅读 1.7k
1 个回答

Channel的个数理论上受限于JVM和操作系统的资源以及系统配置了。
每个Channel对象对应底层操作系统的一个socket文件句柄;而Selctor对应Linux的epoll【理论上无上限】。
那么对于操作系统来说可能的制约因素:

  1. 物理内存
  2. 最大可打开文件句柄数【包括系统、单个进程、用户可以打开的文件句柄数】
  3. 虚拟内存映射大小

JVM来说可能的制约因素:

  1. 堆内存+直接内存大小

当然这是理想化的推论,实际可能还有很多其他问题;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题