一台机器如何共享线程池?

时间:2014-05-21 11:44:46

标签: java multithreading playframework threadpool akka

我注意到一些Web框架(如Play Framework)允许您配置多个不同大小的线程池(其中的线程数)。假设我们在一台单核机器上运行这个游戏。拥有多个线程池不会有巨大的开销吗?

例如,较小的线程池假设异步操作vs大线程池表示大量阻塞调用,因此线程可以进行上下文切换。两种情况都假设基于核心数的并行因子在机器中。我担心的是处理器是进一步共享的。 这是如何工作的?

谢谢!

1 个答案:

答案 0 :(得分:2)

Play当然允许你配置多个执行上下文(相当于一个线程池),但这并不意味着你应该这样做,特别是如果你有一个单核的机器。默认情况下,配置应保持较低(接近核心数)以实现高吞吐量 - 当然,假设操作都是非阻塞的。如果您有阻塞操作,那么想法是让它们在单独的执行上下文中运行,否则会导致默认请求处理耗尽ExecutionContext(Play中的请求处理管道在默认的ExecutionContext上运行,默认情况下限制为少数线程。)

当你拥有比核心更多的线程时会发生什么,当你这么做时会发生什么,这取决于你正在运行的操作(关于I / O等)。如果您只执行CPU绑定操作,则每个核心一个线程应该是最佳的。另见this question