首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java中实现多核算法?

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

Stack Overflow用户
提问于 2009-03-14 20:47:37
回答 7查看 935关注 0票数 0

现代计算机有越来越多的核心。我们想改变我们目前的线性算法来使用这些核心。

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

如果有免费的处理器,有什么好的库可以帮助并行化某些步骤吗?

我会举出一些例子。

  • 如果只有一个处理器,那么创建多个线程是没有意义的。它会减慢速度。
  • 如果在核心二重奏上运行两个进程(服务器上的请求),那么启动线程也是没有意义的。
  • 如果只有一个进程的核心二重奏,这是有意义的。

抽象算法分为A、B、C和D四个步骤,步骤A、B和C可以并行执行。步骤D需要A、B和C的结果。

编辑:我指的是数学算法。没有IO,没有事件等

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-03-14 22:01:34

我认为你需要一个ConcurrentContext从爪哇。见http://javolution.org/target/site/apidocs/javolution/context/ConcurrentContext.html

票数 0
EN

Stack Overflow用户

发布于 2009-03-14 20:55:02

这不一定是真的。

根据算法的不同,将其分割成多个线程通常是有意义的,即使只有一个可用的核心。如果有任何等待套接字,IO等,您可以从中受益。如果有两个进程,“其他”进程可能不会使用100%的另一个核心,所以线程在这里会有所帮助。在这种情况下,相信您的操作系统能够正确地处理它。

您可以始终使用Runtime.availableProcessors()检查处理器计数,以确定如何将其拆分为不同的线程。或者,您也可以使用线程池,该线程池应该可以使用更多的处理器进行正确的缩放。

不过,通常情况下,如果算法具有并行化的意义,我会设计您的算法使用多个处理器。大多数系统都会有更多的核心/处理器可用,如果您发现需要的话,以后可以随时调整您的实现。如果进程长时间运行,那么生成线程的开销将是值得的--如果它已经快了,那么它可能更值得考虑其他需要优化的地方。

票数 4
EN

Stack Overflow用户

发布于 2009-03-14 21:17:52

查看Java 5和更高版本中的各种并发类。你很可能想要一个ThreadPoolExecutor - http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html

ThreadPool的适当值很可能因系统而异,取决于工作负载和硬件架构。使其用户可调。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/646700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档