Java 每个应用程序有一个(较大)线程池,而每个应用程序组件有多个(较小)线程池
一个应用程序承载一个web服务,该服务具有三个接口,用于三个单独和独立的操作,所有这些操作都在应用程序的不同组件中实现,彼此独立,例如在不同的软件包中等,因此它们彼此不太了解,只共享应用程序范围内的配置等 每个用户使用多个数据调用所有这些接口,并且能够至少部分独立地处理这些数据,这就是为什么我目前使用三个线程池进行处理,每个组件一个线程池 原因是,通过这种方式,每个线程池都可以独立优化,这取决于要处理的对象的负载和用途,并且已知用于哪个目的等。但在实践中,目前没有一个线程池关心这些对象,而是使用合理的默认值。这意味着每个线程池仅限于5个线程。如果需要所有池/线程,则可以不在系统上施加太多负载,但如果不需要,则10核CPU的某些核心可能未使用,即使一个用户提供的数据可以由7/8/N核并行处理。另一方面,当前的行为在某种程度上“保证”了,如果不做其他事情,每个任务至少有5个线程可用 因此,为了更动态地使用资源,每个应用程序始终只有一个线程池(例如10个或15个或任意N个线程)比独立的线程池更好吗 或者这是什么?没有明确的答案,因为这类事情通常取决于许多变量,如系统的总体负载,例如备份、cron报告、监控事件和安装更新等,有多少用户调用了哪些接口等等Java 每个应用程序有一个(较大)线程池,而每个应用程序组件有多个(较小)线程池,java,multithreading,performance,threadpool,maintenance,Java,Multithreading,Performance,Threadpool,Maintenance,一个应用程序承载一个web服务,该服务具有三个接口,用于三个单独和独立的操作,所有这些操作都在应用程序的不同组件中实现,彼此独立,例如在不同的软件包中等,因此它们彼此不太了解,只共享应用程序范围内的配置等 每个用户使用多个数据调用所有这些接口,并且能够至少部分独立地处理这些数据,这就是为什么我目前使用三个线程池进行处理,每个组件一个线程池 原因是,通过这种方式,每个线程池都可以独立优化,这取决于要处理的对象的负载和用途,并且已知用于哪个目的等。但在实践中,目前没有一个线程池关心这些对象,而是使用
我的问题有点类似,但不是重复的,因为它不关注一个具体的任务,而是整个应用程序及其可维护性。这只是我反复问自己的一个问题,例如,当我最初只有一个线程池时,甚至可能在添加10个线程池时。正如我所见,拆分为多个线程池有三个原因。这两种方法可能都不适用于您的用例
编辑:添加了第三个用例似乎对此没有明确的答案。我想知道这个web服务是否应该是三个web服务,但没有办法真正回答这个问题3个web服务,又称3个应用程序,又称3个池?最终每个应用程序都会有一个池。。。在我的例子中,这些web服务实际上形成了一个应用程序,它只提供许多不同的web服务。