我们使用的是 netty 3.6.5,并且一直在我们的通道管道上使用 ExecutionHandler 和 OMATPE。我们当前的要求是尽可能多地扩展线程,并按照接收顺序处理事件。应用程序或每个通道的内存还不是一个约束,我们通过在 OMATPE 中将它们设置为 0 来禁用。
在玩了一些 netty 代码之后,我们发现 OMATPE 在启动时使用固定数量的线程,并且数量保持不变,尽管服务器接收到的连接数有所不同。我们发现 OMATPE 存在以下问题: 1.allowCoreThreadTimeOut - 此功能是在请求数量较少时减少核心线程的数量。我们注意到在处理请求时有很多线程被创建和销毁。但是,在任何快照期间,线程总数始终保持在核心池计数中。这对我们来说不是一个大问题。我们调用 setAllowCoreThreadTimeout(false) 来禁用核心线程超时,我们试图从低线程数开始。但是,即使由于下一个问题而调用 setMaximumPoolSize,线程数也永远不会超过低线程数。2. Unbounded LinkedBlockingQueue:OMATPE 使用具有无限容量的 LinkedBlockingQueue,因此当对服务器的请求数量增加时,不会添加新线程。这会导致排队请求的延迟,我们希望避免排队,除非我们缺乏处理资源。
我们想知道您是否有任何其他替代建议或解决方案来满足我们对基于负载的有序通道事件和可扩展线程的要求。另外,如果您需要有关设置的任何其他详细信息,请告诉我。