Java 用户池的自动缩放
我们有一个web应用程序,允许用户触发对外部资源的请求。外部资源花费了未指定的时间来收集结果,因此我们必须轮询它以获取更新,并在更新完成后收集最终结果 我们希望这样做,当用户触发请求时,它被添加到队列中,然后许多工作线程将接收每个请求并进行轮询,而用户则进行其他操作 由于请求的数量在一天中变化很大,我们认为在速度较慢时让大量的工作人员无所事事是一种资源浪费,但同时我们需要有足够的工作人员来处理系统上的峰值负载 我们希望能够在有大量请求等待时添加更多的工人,但在没有什么事情可做时杀死工人 使用EJB可以做到这一点,但我们不想使用它。我们也不想使用JMS或其他大规模框架来处理这个问题,除非我们已经在使用它(Spring、Quartz,还有很多Apache的东西) 由于EJB支持这一点,并且它是在那里发现的更有用的特性之一,我们想象有人已经为我们解决了这个问题。建议?使用具有适当核心和最大池大小值的Java 用户池的自动缩放,java,multithreading,producer-consumer,Java,Multithreading,Producer Consumer,我们有一个web应用程序,允许用户触发对外部资源的请求。外部资源花费了未指定的时间来收集结果,因此我们必须轮询它以获取更新,并在更新完成后收集最终结果 我们希望这样做,当用户触发请求时,它被添加到队列中,然后许多工作线程将接收每个请求并进行轮询,而用户则进行其他操作 由于请求的数量在一天中变化很大,我们认为在速度较慢时让大量的工作人员无所事事是一种资源浪费,但同时我们需要有足够的工作人员来处理系统上的峰值负载 我们希望能够在有大量请求等待时添加更多的工人,但在没有什么事情可做时杀死工人 使用EJ
记住,在有几百个空闲线程的情况下不需要花费巨大的代价,所以你可以考虑只使用。
使用一个具有适当值的内核和最大池大小。
尽管有几百个空闲线程没有花费巨大的代价,所以你可以考虑使用。 < P>从: 如果池当前有多个corePoolSize线程,如果多余线程的空闲时间超过keepAliveTime(请参阅getKeepAliveTime(java.util.concurrent.TimeUnit))。这提供了一种在池未被积极使用时减少资源消耗的方法。如果池稍后变得更活跃,将构造新线程 因此,我建议您首先尝试Java标准库。您必须稍微调整参数,但线程池是高度可配置的。来自: 如果池当前有多个corePoolSize线程,如果多余线程的空闲时间超过keepAliveTime(请参阅getKeepAliveTime(java.util.concurrent.TimeUnit))。这提供了一种在池未被积极使用时减少资源消耗的方法。如果池稍后变得更活跃,将构造新线程 因此,我建议您首先尝试Java标准库。您必须稍微调整参数,但是线程池是高度可配置的