【发布时间】:2016-10-18 01:28:25
【问题描述】:
一个应用托管一个具有三个接口的网络服务,用于三个单独且独立的操作,所有这些操作都在应用的不同组件中实现,彼此独立,例如在不同的包等中,所以他们对彼此了解不多,只共享应用范围的配置等。
所有这些接口都由每个用户调用多个数据,并且能够至少部分独立地处理这些数据,这就是为什么我目前使用三个线程池进行处理,每个组件一个。
原因是这样每个线程池都可以独立优化,具体取决于要处理的事物的负载和目的,并且已知用于哪个目的等。但实际上目前没有关心这些事情和改为使用合理的默认值。这意味着每个线程池例如限制为 5 个线程。如果需要所有池/线程,则可以不给系统施加过多负载,但如果不需要,则 10 核 CPU 中的某些内核可能未使用,即使一个用户提供的数据可以由 7/8/N 处理核心并行。另一方面,当前的行为在某种程度上“保证”了每个任务至少有 5 个线程可用,如果没有做任何其他事情的话。
所以,最好只为每个应用程序拥有一个线程池,例如10个或15个或一些任意N个线程,而不是独立的线程池,以更动态地使用资源?
或者这是无法给出明确答案的事情,因为这些事情总是取决于许多变量,例如系统的总体负载,例如诸如备份、cron 报告、监控和安装更新等,有多少用户调用了哪些接口等等。
我的问题有点类似于an already existing one,但不是重复的,因为它不关注一项具体任务,而是关注整个应用程序及其可维护性。这只是我一遍又一遍地问自己的一个问题,例如当我最初只有一个池时,甚至可能添加了 10 个。
【问题讨论】:
-
似乎没有明确的答案。我想知道这个web服务应该是三个web服务,但是没有办法真正回答这个问题
-
3 个 Web 服务,也就是 3 个应用程序,也就是 3 个池?最终将再次成为每个应用程序一个池...在我的情况下,这些 Web 服务实际上形成了一个应用程序,它只是提供许多不同的 Web 服务。
标签: java multithreading performance threadpool maintenance