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

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

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

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


回答:

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

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

JVM来说可能的制约因素:

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

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

以上是 netty的组件EventLoop中一个Selector包含多少个channel? 的全部内容, 来源链接: utcz.com/p/944453.html

回到顶部