Pre*_*hev 1 java multithreading akka playframework playframework-2.0
我一直在Play中阅读有关线程池(https://www.playframework.com/documentation/2.1.0/ThreadPools)的Play Framework文档,但不知何故,我无法对某些事情进行数学计算.也许,你可以帮助我.
文档说,在阻塞和非阻塞调用之间维护桃的最佳实践是拥有多个线程池,并且每个特定类型的操作使用一个.在非阻塞操作的情况下,理想的线程池将为每个核执行1个线程,因此线程的最大值将非常低.对于阻塞操作(例如重型关系数据库调用),更好的方法是拥有一个允许每个核心有许多可用线程的大型线程池.
我没有看到数学点击的地方,如果我们想象我们在4核机器上运行应用程序,那么主动运行的线程的最大值是4.这意味着如果4个线程占用了耗时的数据库操作,我的非阻塞操作也将很难执行,直到阻塞操作消失.
因此,我的问题是运行两个单独的线程池的真正好处是什么,而不是一个中等大的线程池.我错过了什么?
被阻止的线程不会阻塞核心.
当一个线程被阻塞时,它会放弃它正在运行的核心,使该核心可用于运行另一个线程.因此,如果有可用的非阻塞操作,则可以在不同的线程上继续操作.
使用单独线程池的原因是,阻塞操作可能会耗尽池中的所有可用线程,因此没有可用于非阻塞操作的线程池.通过使用单独的池进行非阻塞操作,可以帮助确保有可用的线程来利用阻塞操作不会持续使用的核心.
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |