Play Framework 在向服务器添加更多资源时是否会扩展线程池
Play Framework does it threadpool scale when adding more resources to server
我是新手,正在使用它进行同步数据库调用,有一些我不清楚或有误解的地方;首先,在我的 application.conf 中,我输入了以下代码
play {
akka {
akka.loggers = ["akka.event.slf4j.Slf4jLogger"]
loglevel = WARNING
actor {
default-dispatcher = {
fork-join-executor {
parallelism-min = 300
parallelism-max = 300
}
}
}
}
}
这是我从 https://www.playframework.com/documentation/2.3.x/ThreadPools and also have read 得到的。这意味着您始终有 300 个线程可用于阻止数据库操作?或者最多每秒 300 个请求?另外,如果我有更多的服务器资源,比如更多的 Ram、CPU 或内核,这会增加可用线程的数量吗?例如,如果我购买了一台有 4 个内核或等等的服务器。可用线程会跳到 1,200 个吗?如前所述,我的所有操作都阻止了用户注册和用户聊天,所以现在我想在错误变得更昂贵之前消除它们。
我也想知道整个 Akka 和线程的东西有一段时间了,所以我做了一些研究,这就是我想出的。希望对你有帮助。
Play 使用 Akka 进行线程管理和并发。好处是在你的应用程序编程中再也不用担心并发的麻烦了。
Akka 使用 dispatchers 来管理它的 actor 的处理器时间(actors 是 Akka 中实际计算发生的地方)。
Dispatchers are one of the most important parts of Akka.NET, as they control the throughput and time share for each of the actors, giving each one a fair share of resources.
Akka 允许使用不同的调度程序,但默认调度程序是 'fork-join-executor',这也是 Play 默认使用的调度程序。
在您的配置中,您将最小和最大线程数设置为 300。这样您可以将线程数固定为 300,因为您希望线程池大小非常大,因为您有许多同步数据库调用。您有 300 个独立于处理器数量的线程。如果您购买一台处理器更多的新服务器,它仍然是 300。
否则,如果不设置最小和最大线程数,调度程序将根据公式available processors * parallelism-factor
进行一些计算。当然你也可以设置这个parallelism-factor来适应不同服务器的不同处理器数量。因此,如果您将此并行度因子设置为 75,它将导致在具有 4 个处理器的服务器上最多有 300 个线程,而在具有 8 个处理器的服务器上最多有 600 个线程。
在 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.
如果您想了解更多关于 Akka 和调度程序的信息,我推荐 akka-concurrency-test 的文档,它本身就有很好的资源列表。
我是新手,正在使用它进行同步数据库调用,有一些我不清楚或有误解的地方;首先,在我的 application.conf 中,我输入了以下代码
play {
akka {
akka.loggers = ["akka.event.slf4j.Slf4jLogger"]
loglevel = WARNING
actor {
default-dispatcher = {
fork-join-executor {
parallelism-min = 300
parallelism-max = 300
}
}
}
}
}
这是我从 https://www.playframework.com/documentation/2.3.x/ThreadPools and also have read
我也想知道整个 Akka 和线程的东西有一段时间了,所以我做了一些研究,这就是我想出的。希望对你有帮助。
Play 使用 Akka 进行线程管理和并发。好处是在你的应用程序编程中再也不用担心并发的麻烦了。
Akka 使用 dispatchers 来管理它的 actor 的处理器时间(actors 是 Akka 中实际计算发生的地方)。
Dispatchers are one of the most important parts of Akka.NET, as they control the throughput and time share for each of the actors, giving each one a fair share of resources.
Akka 允许使用不同的调度程序,但默认调度程序是 'fork-join-executor',这也是 Play 默认使用的调度程序。
在您的配置中,您将最小和最大线程数设置为 300。这样您可以将线程数固定为 300,因为您希望线程池大小非常大,因为您有许多同步数据库调用。您有 300 个独立于处理器数量的线程。如果您购买一台处理器更多的新服务器,它仍然是 300。
否则,如果不设置最小和最大线程数,调度程序将根据公式available processors * parallelism-factor
进行一些计算。当然你也可以设置这个parallelism-factor来适应不同服务器的不同处理器数量。因此,如果您将此并行度因子设置为 75,它将导致在具有 4 个处理器的服务器上最多有 300 个线程,而在具有 8 个处理器的服务器上最多有 600 个线程。
在 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.
如果您想了解更多关于 Akka 和调度程序的信息,我推荐 akka-concurrency-test 的文档,它本身就有很好的资源列表。