首页 > 解决方案 > 用于完整 Web 应用程序的通用 executorservice(固定线程池)还是为每个请求使用 executorService 的新线程池?

问题描述

为了提高我的请求的响应时间,我打算使用 executorService 并将我的工作分配给多个线程并减少请求的响应时间。

但是在阅读文章和博客后,为每个请求创建一个新的线程池也会影响性能。

空闲的方法是什么, - 1. 我应该为每个请求创建一个新的线程池吗?或者 2. 我是否应该为整个应用程序保留一个固定的线程池,并让每个请求都使用该单个线程池中的线程?

标签: javamultithreadingexecutorservice

解决方案


那么,创建线程池有什么意义呢?通常是两个原因之一或两个:

A)您的应用程序可以重用线程,而不是通过销毁旧线程并创建新线程来替换它们来浪费大量 CPU 时间。

B) 它允许您的应用程序控制它创建的线程数。当大量任务(例如,客户端请求)进入时,您的应用程序可以在一个漂亮、紧凑的队列中创建任务对象,然后它可以使用一些合理数量的任务对象,而不是创建一些无限数量的资源消耗线程。线程来处理它们

创建线程意味着创建和销毁这些池管理的线程。因此,如果您为每个客户端请求创建和销毁一个新线程池,您将完全击败原因 (A) 和 (B)。


* 最好由主机上可用的 CPU 数量、内存量等决定。


推荐阅读