Play框架对我的应用程序暴露的线程数量有限制吗?Play应用程序内部的线程大小非常珍贵吗?如果我在应用程序中使用自己创建的线程池而不是Play提供的线程池,这样做是否推荐?请问有人可以详细介绍一下Play如何处理线程吗?
Play框架对我的应用程序暴露的线程数量有限制吗?Play应用程序内部的线程大小非常珍贵吗?如果我在应用程序中使用自己创建的线程池而不是Play提供的线程池,这样做是否推荐?请问有人可以详细介绍一下Play如何处理线程吗?
您的Play应用程序中线程的限制基本上要由分配给VM的最大内存确定。每个线程都会消耗相当多的内存,因为它们有自己的堆栈。实际上,可能的最大线程数取决于您将传递给JVM的参数和计算机上的总RAM等。
您应该让Play为您管理线程。配置文档位于这里。Play的设计部分涉及最小化所需的线程数量,因此,除非您执行了大量阻塞调用,否则不需要进行任何更改。
Play使用Akka来处理线程。可以在这里找到内部Actor系统的配置。其中精华部分是parallelism-factor
和parallelism-max
。如果我们查看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个。