当前位置: 首页 > 面试题库 >

具有单个线程池比多个线程池更好的设计

况繁
2023-03-14
问题内容

在Java中拥有多个线程池的优缺点是什么?我已经看过代码,其中有多个线程池用于不同的“类型”任务,而且我不确定它是更好的设计还是只是开发人员感到懒惰。一个示例是将ScheduledThreadPoolExecutor用于定期执行的任务或具有超时的任务,而将另一ThreadPoolExecutor用于其他任务。


问题答案:

具有单独的专用线程池的目的是,使活动不会因线程不足而被饥饿,因为其他活动占用了所有线程。如果某些服务具有自己的线程池,则可以确保可以使用一定数量的线程,并且对其他服务的需求不那么敏感。

使用多个专用线程池,如果服务需要太多线程,则它必须等待线程可用,从而将背压引入系统,从而使其逐渐降级,并且由于其他部分拥有自己的线程池,因此它们有机会赶上他们的部分。因此,想法是随着负载的变化,系统应具有更稳定的特性。在您描述为计划的任务使用单独的线程池的情况下,请确保无论系统其余部分有多忙,这些任务都可以运行。

多个线程池将需要进行调整,以确保每个池都有足够的线程而不是太多。使用单个线程池,您不需要调整,有时可能会更好地利用所有线程,但是您可能无法预测某些重要任务会及时获取需要完成的线程。



 类似资料:
  • 问题内容: 使用新的fork / join框架 有什么好处,而不是仅在开始时将大任务简单地拆分为N个子任务,然后将它们发送到缓存的线程池(来自Executors),然后等待每个任务完成?我看不到使用fork / join抽象如何简化问题或使解决方案比我们多年以来的效率更高。 例如,本教程示例中的并行化模糊算法可以这样实现: 首先拆分,然后将任务发送到线程池: 任务进入线程池的队列,当工作线程可用时

  • 我对连接池的理解是;如果connectionstring完全相同,那么我们重用该连接,而不是建立新的连接。 我的问题是,我正在为并行处理创建许多线程。在这个“虚拟”程序中,我创建了500个线程,并让线程池函数处理这些线程。 步骤是: > < li> 每个线程在SQL中创建一个更新表。(说明更新的时间戳) 然后线程Hibernate1到10秒(随机)。 最后,线程在 SQL 中进行另一次更新(说明结

  • 接收到数据时回调此函数,发生在worker进程中。函数原型: function onReceive(swoole_server $server, int $fd, int $reactor_id, string $data); $server,swoole_server对象 $fd,TCP客户端连接的唯一标识符 $reactor_id,TCP连接所在的Reactor线程ID $data,收到的数

  • 这里首先介绍了java5中的并发的小工具包:java.util.concurrent.atomic,然后介绍了线程池的概念,对使用java5的方式创建不同形式的线程进行了演示,之后介绍了两个 对象:Callable和Future,用于获取线程执行后的结果,对于线程锁技术则在另外一篇文章中介绍。 Java5中的线程并发库都在java.util.concurrent包及子包中 1. Executor类

  • 主要内容:一、MySql中的线程,二、主要方式,三、源码流程,四、总结一、MySql中的线程 在mysql中,每一个连接上来,就会分配给一个相关的THD数据类。在前面的分析中可以看到,连接器(Connectors)连接到的直接就是连接池,在连接池的线程处理中分为三部分,即一对一(一个连接对应一个线程),多对一(多个连接对应一个线程)和线程池(多对多)。 线程池和线程可以针对不同的具体场景来处理具体的事务,这样既兼顾了效率又提高了适应性,对于新手来说,这就是设计的一个

  • 问题内容: 我已经看到了线程池执行程序的实现及其所提供的拒绝执行策略。但是,我有一个自定义要求- 我想拥有一个回调机制,在该机制中,当达到队列大小限制时,我会收到通知,并说何时队列大小减少到最大允许队列大小的80%。 我觉得可以通过子类化线程池执行程序来实现,但是已经有一个实现的版本吗?我很乐意在需要时提供更多详细信息和我的工作,以便提供清晰的信息。 问题答案: 我希望有一个回调机制,当达到队列大