维护自己的线程池的库有啥影响?

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) 创建线程池并将其传递给其他东西),则可以只创建一个线程池并让两个库都使用它,在这种情况下它们将共享线程。

【讨论】:

以上是关于维护自己的线程池的库有啥影响?的主要内容,如果未能解决你的问题,请参考以下文章

Python标准库和第三方库有啥区别

高效开发:线程池的使用和基本原理剖析

自己实现一个简单的线程池

Linux线程池

OpenCV 中的 vc10、vc11 和 vc12 库有啥区别?

unity中协程一直运行会有啥影响