java - 单机如何共享线程池?

标签 java multithreading playframework threadpool akka

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

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

谢谢!

最佳答案

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

当你的线程多于内核时会发生什么,以及当你这样做时会发生什么,很大程度上取决于你正在运行的操作(关于 I/O 等)。如果您只执行 CPU 密集型操作,那么每个核心一个线程应该是最佳选择。另请参阅this question

关于java - 单机如何共享线程池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23782247/

相关文章:

python - 在 Keras 和 Tensorflow 中为多线程设置复制模型

c# - 从正在运行的线程 C# 更改窗体的属性

java - 线程 JFrame 需要更新 JTextPane

json - PlayFramework:如何将一系列 JsValue 实例合并到单个 JSON 文档

java - 如何从命令行在 IntelliJ IDEA 中打开 Play 应用程序?

java - 使用 Play Framework 的 OpenID

java - 如何获取两个 java.util.Date 之间的年数?

java - 什么是默认 javac 源模式(断言为标识符编译)?

java - jni 从 jobject 访问 jobjectArray

java - JavaFX FileChooser "remember"可以是它打开的最后一个目录吗?