维护自己的线程池的库有啥影响?
Posted
技术标签:
【中文标题】维护自己的线程池的库有啥影响?【英文标题】:What is the impact of libraries that maintain their own threads pool?维护自己的线程池的库有什么影响? 【发布时间】:2015-05-11 17:54:24 【问题描述】:我在我们的项目中使用 Google Guava 和 Netflix Hystrix 库。每个库都带有自己的线程池,您可以对其进行配置。
这让人想到了它的影响。我的意思是每个库都在维护自己的线程池,当然,每个硬件都有自己的最佳设置。
假设我在其线程池中设置了 50 个 Guava,在其线程池中设置了 40 个 Hystrix。会发生什么?他们会争夺资源?
【问题讨论】:
你指的是 Guava 中的哪个线程池? @ColinD 类似:ListeningExecutorService service = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(10)) 【参考方案1】:我对 Hystrix 不熟悉,但您对 Guava 的示例是:
ListeningExecutorService service =
MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(10));
在这种情况下,Guava 根本不提供线程池...您正在您的代码中配置线程池,使用标准 JDK 方法创建线程池,然后包装ExecutorService
使用 Guava 方法。
为了(希望)回答您的问题,如果您有两个独立的线程池,它们实际上是独立的......它们不会共享任何线程。如果一个有 50 个线程,一个有 40 个线程,那么您将有 90 个线程。同样,我不知道您使用 Hystrix 所做的任何事情是如何工作的,但如果它与您使用 Guava 所做的类似(使用 Executors.newFixedThreadPool(n)
创建线程池并将其传递给其他东西),则可以只创建一个线程池并让两个库都使用它,在这种情况下它们将共享线程。
【讨论】:
以上是关于维护自己的线程池的库有啥影响?的主要内容,如果未能解决你的问题,请参考以下文章