我需要在我的多核桌面上并行化 CPU 密集型 Java 应用程序,但我对线程编程不太满意。我研究了 Scala,但这意味着学习一门新语言,这真的很耗时。我还查看了 Ateji PX Java 并行扩展,这些扩展看起来很容易使用,但还没有机会对其进行评估。有人会推荐它吗?欢迎提出其他建议。
在此先感谢您的帮助
账单
我需要在我的多核桌面上并行化 CPU 密集型 Java 应用程序,但我对线程编程不太满意。我研究了 Scala,但这意味着学习一门新语言,这真的很耗时。我还查看了 Ateji PX Java 并行扩展,这些扩展看起来很容易使用,但还没有机会对其进行评估。有人会推荐它吗?欢迎提出其他建议。
在此先感谢您的帮助
账单
我建议您尝试使用内置的 ExecutorService 来跨多个线程/内核分配多个任务。您是否有任何这可能不适合您的要求?
Java 并发实用程序:
http://download.oracle.com/javase/1.5.0/docs/guide/concurrency/overview.html
使 Java 上的并行编程比以前更容易。我建议从那里开始 - 如果您对使用线程的那种级别感到不舒服,我会三思而后行。并行化任何东西都需要对如何完成和协调并发计算有一定程度的技术舒适度。在我看来,它不能比那个框架容易得多 - 这就是你看到这么少替代品的部分原因。
其次,您应该考虑的主要事情是并行化的工作单元是什么。如果您的工作单元是独立的(即每个并行任务不会影响其他任务),这通常会容易得多,因为您根本不需要担心太多(或任何)同步。努力思考如何对问题进行建模,以使计算尽可能独立。如果你建模得好,你几乎肯定会减少代码行数(从而减少错误等)。
诚然,为您自动并行化的框架不太容易出错,但如果您的模型工作单元不符合它们的并行化方案,则可能不是最理想的。
我是Ateji PX的首席开发人员。正如您所提到的,保证线程安全是一个重要的话题。这也是一个非常困难的问题,除了手写和手工检查的@ThreadSafe 注释之外没有太多帮助。参见例如“线程问题”。
我们目前正在为 Ateji PX 开发并行验证器。这已经成为可能,因为 Ateji PX 中的并行性是组合的(与线程不同)并且基于良好的数学基础,即 pi 演算。即使没有工具,经验表明,以直观和组合的方式表达并行性可以更容易地“思考并行”并更早发现错误。
我快速浏览了 Ateji PX 网站。似乎是一个不错的产品,但我担心你会在某个时候感到失望,因为 Ateji PX 只为你提供了一种直观的简单方法来执行高级并行操作,例如将工作负载分配给几个工人,在它们之间创建集合点并行任务等。但是,正如您可以在如何检测和防止数据依赖关系部分的常见问题解答中阅读的那样。Ateji PX 不确保底层代码是线程安全的。因此,无论如何,您仍然需要 Java 线程编程方面的技能。
编辑:
还要考虑到当维护时间到了而您无法执行它时,与在 Ateji PX 中相比,找到具有标准 Java 多线程编程技能的承包商、员工或实习生会更容易。
最后一句话,有 30 天免费评估,试试吧。
不要担心 Java 7 会为 Doug lea 提供 Fork Join 以进行分布式处理。