gpt4 book ai didi

threadpool - 我们应该为长时间运行的线程使用线程池吗?

转载 作者:行者123 更新时间:2023-12-01 13:50:20 27 4
gpt4 key购买 nike

我们应该为长时间运行的线程使用线程池还是启动我们自己的线程?有什么设计模式吗?

最佳答案

不幸的是,这取决于。没有硬性规定说您应该始终使用线程池。

线程池提供两个主要功能:

  1. 线程的委托(delegate)创建/重用。
  2. 背压

IMO,背压属性很有趣,但通常是最难理解的。您的机器在一组有限的资源上运行。如果您有(比方说)8 个 CPU 内核并且它们都在忙于工作,您可能会以某种方式表明添加更多工作(提交更多任务)没有帮助,至少在延迟方面没有帮助。

这就是 java.util.concurrent.ExecutorService 实现允许您指定您选择的 java.util.concurrent.BlockingQueue 的原因。当此队列变满时,调用线程将阻塞,直到线程池设法完成正在进行的任务。

线程池中是否有长时间运行的线程取决于它在做什么。如果线程一直很忙(意味着它永远不会完成),那么它将始终占用线程池中的一个插槽,这是毫无意义的。

关于线程的委托(delegate)创建/重用;也许你可以有两个池,一个用于长时间运行的任务,一个用于其他任务。或者也许是一个具有一个插槽的长时间运行的线程池,这将防止两个长时间运行的任务同时运行,前提是这是您想要的。

如您所见,没有一个好的答案。这实际上归结为您要实现的目标以及您希望如何使用手头的资源。

关于threadpool - 我们应该为长时间运行的线程使用线程池吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32257061/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com