java - 如何在 Java 中实现多核算法?

标签 java algorithm multithreading multicore

现代计算机的内核越来越多。我们想更改当前的线性算法以使用这些内核。

只有在有空闲处理器的情况下,拆分任何算法以使用不同的线程才有意义。

如果有空闲处理器,是否有任何好的库可以帮助并行化某些步骤?

我会举一些例子。

  • 如果只有一个处理器,则创建多个线程毫无意义。它会降低速度。
  • 如果在核心双核上运行 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/

相关文章:

arrays - 可以从字符串数组中至少以两种方式制作的最短字符串

multithreading - 我可以在 parfor (MATLAB) 上在工作人员之间发送和接收数据吗?

ios - 为什么一个简单的模态视图 Controller 在呈现和关闭时会滞后?

algorithm - 循环调度算法

c - C 中的可移植线程安全?

c# - 迭代时从另一个线程修改列表 (C#)

java - else 和 else-if 语句是否应该位于不同的行

java - JDBC 连接不上数据库

java - 静态 index.html 文件 - servlet 容器是否首先被命中?

java - Spring boot - 服务类为空