Play 框架和线程池

Play Framework and Threadpools

Play 框架向我的应用程序公开的线程数是否有限制? Play 应用程序中的线程大小有那么珍贵吗?如果我在应用程序中使用我自己创建的线程池而不是使用 Play 提供的线程池怎么办。这是推荐的吗?谁能解释一下 Play 如何处理线程?

Play 应用程序中的线程限制基本上必须由分配给 VM 的最大内存决定。每个线程都会消耗相当多的内存,因为它们有自己的堆栈。本质上,可能的最大线程数取决于您将传递给 JVM 的参数和计算机上的总 RAM 等。

您应该让 Play 为您管理线程。配置文档位于 here。 Play 的部分设计致力于最大限度地减少您需要的线程数,因此除非您正在进行大量阻塞调用,否则您不需要接触它。

Play 使用 Akka 来处理线程。内部演员系统的配置可以在 here. The juicy part in this is the parallelism-factor and parallelism-max. If we look at the well commented reference configuration for Akka 中找到:

# The parallelism factor is used to determine thread pool size using the
# following formula: ceil(available processors * factor). Resulting size
# is then bounded by the parallelism-min and parallelism-max values.
parallelism-factor = 3.0

# Max number of threads to cap factor-based parallelism number to
parallelism-max = 64
根据参考配置,

Play 的 parallelism-factor 默认 设置为 1。这意味着默认情况下,Play 将拥有一个等于可用处理器数量的线程池,最多为 24 个。