首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Java服务器的单线程池还是多线程池?

Java服务器的单线程池还是多线程池?
EN

Stack Overflow用户
提问于 2009-09-17 08:07:10
回答 2查看 5.4K关注 0票数 13

我正在编写一个相当复杂的Java服务器应用程序,除了通常的请求-响应处理之外,它还具有重要的后台处理部分。一些后台处理是使用Quartz框架以类似cron的方式完成的。其他任务更多的是随需应变-如果一个新的客户端连接,它会创建额外的作业来偶尔更新它。cron任务也可以是多种多样的--有些是监视外部应用程序,有些是计算统计数据等等。

我使用了许多线程池来运行所有这些作业,想法是相似的作业将共享一个线程池,但不同的作业不会共享一个线程池。例如,监视器作业永远不会在统计信息池上运行,而统计信息作业永远不会在监视器池上运行。

另一方面,我知道有些人更喜欢只有一个线程池,在它上面运行所有的东西,没有任何分离。

我想知道在这种情况下最好的实践是什么。

分离线程池的优缺点是什么?

这有什么关系吗?

EN

回答 2

Stack Overflow用户

发布于 2009-09-17 08:37:11

答案取决于您是否需要在不同类型的活动之间隔离应用程序资源。

例如,我目前正在编写一个服务器应用程序,该应用程序由几个高吞吐量的编写器和潜在的许多读取器组成。读者会偶尔访问应用程序,但可能会请求大量数据(即长时间运行的请求)。我需要确保编写者永远不会挨饿,所以我将在我的设计中使用两个线程池进行读/写。如果读线程池暂时耗尽,写线程将不受影响;只有读请求将被延迟。

另一种方法是将PriorityQueueThreadPoolExecutor结合使用,并为写请求分配更高的优先级。

所以总而言之,我的建议是:从一个线程池开始,只有在有具体原因的情况下才会让你的设计变得更加复杂。

票数 6
EN

Stack Overflow用户

发布于 2009-09-17 08:15:59

这不是一个直接的答案,而是另一个建议:-(

您的Quartz作业可以暂停、取消等等,我们称之为"managed“。我猜你会创建一些UI来管理它们。

您是否意识到您的其他作业(“按需”)不会从相同的功能中受益,当然,除非您实现它?您是否考虑过将所有内容都设置为quartz job (即使它立即启动),以获得统一的代码?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1437389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档