java - 用于完整 Web 应用程序的通用 executorservice(固定线程池)还是为每个请求使用 executorService 的新线程池?
问题描述
为了提高我的请求的响应时间,我打算使用 executorService 并将我的工作分配给多个线程并减少请求的响应时间。
但是在阅读文章和博客后,为每个请求创建一个新的线程池也会影响性能。
空闲的方法是什么, - 1. 我应该为每个请求创建一个新的线程池吗?或者 2. 我是否应该为整个应用程序保留一个固定的线程池,并让每个请求都使用该单个线程池中的线程?
解决方案
那么,创建线程池有什么意义呢?通常是两个原因之一或两个:
A)您的应用程序可以重用线程,而不是通过销毁旧线程并创建新线程来替换它们来浪费大量 CPU 时间。
B) 它允许您的应用程序控制它创建的线程数。当大量任务(例如,客户端请求)进入时,您的应用程序可以在一个漂亮、紧凑的队列中创建任务对象,然后它可以使用一些合理数量的任务对象,而不是创建一些无限数量的资源消耗线程。线程来处理它们
创建线程池意味着创建和销毁这些池管理的线程。因此,如果您为每个客户端请求创建和销毁一个新线程池,您将完全击败原因 (A) 和 (B)。
* 最好由主机上可用的 CPU 数量、内存量等决定。
推荐阅读
- mysql - 需要用以前的值替换 NULL
- haskell - <**> 是 <*> 的变体,参数颠倒了。“颠倒”是什么意思?
- xml - 在 XSLT 2.0 中定义变量时使用 xsl:copy-of
- angularjs - 如何结合 AngularJS 组件和指令来启用编译?
- visual-studio-code - 仅为 TS/TSX 文件删除 CR - VSCode 1.46 上的 Prettier ESLint
- database - 大数据库的领域迁移
- python - _meta.get_field() '方法' 对象不可下标
- javascript - jQuery on() 方法不适用于动态添加类的元素
- python - 函数上的 Python 类型提示
- javascript - Jquery UI自动完成成功但不显示文本