单个机器如何共享线程池



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

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

谢谢!

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

当你的线程比内核多时会发生什么,当你这样做时会发生什么,这在很大程度上取决于你正在运行的操作(关于I/O等)。如果只执行cpu限制的操作,每个内核一个线程被认为是最佳的。参见这个问题。

最新更新