现代计算机的内核越来越多。我们想更改当前的线性算法以使用这些内核。
只有在有空闲处理器的情况下,拆分任何算法以使用不同的线程才有意义。
如果有空闲处理器,是否有任何好的库可以帮助并行化某些步骤?
我会举一些例子。
- 如果只有一个处理器,则创建多个线程毫无意义。它会降低速度。
- 如果在核心双核上运行 2 个进程(服务器上的请求),则启动线程也没有意义。
- 如果核心二重奏上只有一个进程,那是有道理的。
抽象算法有A、B、C、D 4个步骤,A、B、C步骤可以并行执行。步骤 D 需要 A、B 和 C 的结果。
编辑:我的意思是一种数学算法。无 IO,无事件等
最佳答案
这不一定是真的。
根据算法,将其拆分为多个线程通常是有意义的,即使只有一个核心可用。如果有任何等待套接字、IO 等,您可以从中受益。如果有 2 个进程,“其他”进程可能不会 100% 使用其他核心,因此线程在这里可以提供帮助。在这种情况下,请相信您的操作系统能够正确处理它。
您始终可以使用 Runtime.availableProcessors() 检查处理器数量,以确定如何将其拆分为单独的线程。或者,您可以使用线程池,它应该可以正确扩展更多处理器。
不过,一般来说,如果算法对并行化有意义,我会将您的算法设计为使用多个处理器。大多数系统将有更多可用的核心/处理器,如果您发现需要它,您可以随时调整您的实现。如果进程长时间运行,生成线程的开销将是值得的 - 如果它已经很快,可能更值得寻找其他地方进行优化。
关于java - 如何在 Java 中实现多核算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/646700/