阻止Netty IO Threads背压的好主意吗?

时间:2017-05-26 09:41:23

标签: java asynchronous netty nio

好的,所以我认为从Netty IO线程做任何长/阻塞操作都是一个坏主意,因为它会阻止Netty的事件调度发生。

然而,我在想,如果这样做实际上是一个好主意,实施一种背压机制。

让我解释一下。

想象一下,您正在构建一个客户端应用程序,该应用程序使用Netty连接到某种类型的服务器,比如http服务器,但这并不重要。您查询了很多服务器并处理了响应,甚至可能需要进行其他网络调用才能传递结果。想象一下,您从所有这些http服务器获取数据的速度远远高于您处理它们的速度。

现在,在这种情况下,您可以按照不阻止Netty线程的建议,将这些耗时的操作分解出来并在单独的线程池上运行它们,这很棒,但是线程池将是热门,因为响应正在从Netty的IO线程中堆积起来。很快你就会看到OOM,如果你的Executor有一个无限制的任务队列。

那么,如果您实际执行所有那些昂贵的操作 on IO线程,那么它可以作为背压机制。你只会让Netty跟你一样快,处理率是...... [编辑] 或者,您可以在ExecutorService中使用具有相同效果的阻塞队列 - >它会在队列满时阻塞调用线程 [/编辑]

这样做是否有意义?如果没有,那么在这种情况下解决缓慢的消费者问题的推荐方法是什么?

0 个答案:

没有答案