一个Java应用程序应存在多少个线程?

时间:2018-11-23 14:30:23

标签: java concurrency

据我所知,有一条规则:

N_threads = N_cores / (1 - blocking_factor)

因此,一方面,如果我有CPU密集型任务,那么我最多应该有N_cores个线程,另一方面,如果我有IO密集型任务,那么我可以有尽可能多的线程

问题:
例如,如果我为CPU任务创建了两个池,每个池中都有“ N_cores”个线程,那么它会违反该规则吗?此规则适用于特定的线程池(允许我拥有尽可能多的线程)还是JVM公共池(并且我应将此规则应用于属于我的整个Java进程的线程)?

1 个答案:

答案 0 :(得分:0)

因此,该公式很好地适用于CPU任务,因此,如果完全没有阻塞,则可以通过核数轻松地计算池大小。如果处理过程涉及更改任务的阻塞时间,则可能需要更大的灵活性来确保应用程序的响应速度。在临时需要附加线程以确保足够的并行性的情况下,可以使用ForkJoinPool.ManagedBlocker。

查看本课程的用法:https://www.youtube.com/watch?v=5M55Ab6LG7A