拥有多个线程池与单个线程池相比有啥好处?
Posted
技术标签:
【中文标题】拥有多个线程池与单个线程池相比有啥好处?【英文标题】:What is the benefit of having multiple thread pools versus a single one?拥有多个线程池与单个线程池相比有什么好处? 【发布时间】:2016-05-21 13:27:29 【问题描述】:在什么情况下最好使用多个线程池而不是单个线程池?
我正在使用 the Microsoft threadpool 在 Windows 上进行开发,以处理文档所述的工作项:
Each process can create multiple isolated pools with different characteristics as necessary.
There is also a default pool for each process.
在最初的考虑中,似乎为进程拥有一个线程池是更可取的选择,这样当其他线程池中可能存在可用的未使用线程时,线程就不会被不必要地启动。
很明显,文档中提到的一个例外 - 当线程池需要不同的特性时。在确定是否应该使用多个线程池而不是单个默认池时,我还应该考虑哪些其他条件?
【问题讨论】:
我确实看到 Java 线程池周围至少有一个 couple questions 可能是相关的,但 MS 线程池看起来不太可定制,这可能会影响答案。 这绝不是“最佳实践”。但是当你设计一个操作系统时,你永远不能假设每个编写在进程中运行的代码的人都认识彼此。如果这些代码块在不同时间需要一个池,那也不会错。如果只有你,那么选择是显而易见的:你有多少人。 【参考方案1】:所有这些都假设所有线程都需要相同的特性:
通常,单个池是最好的。
有时,您在架构上希望应用的不同组件彼此不认识。在那种情况下,他们不应该知道彼此的线程池。所以这将是一个架构决策。
尤其是,如果您加载第 3 方组件,共享池将变得很困难。
另一个原因是,如果其中一个工作负载存在溢出池并中断另一个工作负载的风险,则将某些工作负载与另一个工作负载隔离。
【讨论】:
以上是关于拥有多个线程池与单个线程池相比有啥好处?的主要内容,如果未能解决你的问题,请参考以下文章
Servlet线程池与Servlet实例池 - 由Web容器组成
单个 epoll + 线程池与每个线程一个 epoll 这两种架构哪个更适合大量短连接的场景?
单个 epoll + 线程池与每个线程一个 epoll 这两种架构哪个更适合大量短连接的场景?