Play框架向我的应用程序公开的线程数是否有限制? Play应用程序内的线程大小是否如此珍贵?如果我在应用程序中使用我自己创建的线程池而不使用Play提供的线程池,该怎么办?这是推荐的吗?任何人都可以对Play处理线程的方式有所了解吗?
答案 0 :(得分:4)
Play应用程序中的线程限制必须基本上由分配给VM的最大内存决定。线程将消耗相当多的内存,因为它们有自己的堆栈。本质上,可能的最大线程数取决于您将传递给JVM的参数以及计算机上的总RAM等。
您应该让Play为您管理线程。配置文档位于here。 Play的部分设计可以最大限度地减少你需要的线程数量,所以除非你进行大量的阻塞调用,否则你不需要触摸它。
Play使用Akka来处理线程。可以找到内部actor系统的配置here。其中多汁的部分是parallelism-factor
和parallelism-max
。如果我们查看评论良好的reference configuration为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
基于参考配置,默认的播放parallelism-factor
设置为1。这意味着默认情况下,Play的线程池数等于可用的处理器数,最多为24个。