首页 > 解决方案 > 在 Reactor Java 应用程序中可以拥有的发布者或订阅者的数量是否有上限?

问题描述

在基于 Reactor Java 的应用程序中,我们通过创建稍后订阅的发布者来释放线程。

我可以创建无限数量的发布者来扩展我的应用程序吗?创建发布者的限制是什么。

标签: javaspring-webfluxproject-reactor

解决方案


您可以创建任意数量的发布者 - 在您订阅之前不会发生任何事情(至少对于标准的冷发布者而言),所以在此之前它们就像任何其他 POJO 一样。显然你必须有足够的堆空间,但仅此而已。

如果您要询问活跃发布者的上限(即一旦您订阅) - 这有点复杂。在传统的每线程模型中,上限通常是您可以在上下文之间切换的线程数(通常是几千个)。反应式框架基本上通过仅使用一个事件循环来消除该限制,这意味着实际限制通常由下式给出之一:

  • 输入/输出带宽。如果您有这么多请求,您没有网络带宽来及时(或根本)响应它们,那么这就是您的限制。
  • CPU 周期。如果您有足够的网络带宽,但您的发布者正在执行 CPU 密集型操作,那么这很可能是您首先遇到的问题 - 虽然您不再有上下文切换的开销,但仍然需要一定数量的 CPU 周期才能处理每个请求,而您在这里只有有限的资源。

但实际上,上述两种设置因设置而异 - 因此,了解您将遇到什么限制以及何时遇到限制的唯一真正方法是对您的应用程序和硬件进行基准测试以找出答案。


推荐阅读