我正在研究一种科学应用程序,该应用程序具有可以并行进行的易于分离的部分。因此,我将这些部分编写为每个独立线程运行,尽管这似乎不是将事物分成线程的标准原因(即,不阻塞某些退出命令等)。
几个问题:
这是否真的为我在标准多核桌面上买了任何东西 - 即,如果我有一个当前的 JVM,线程实际上会在单独的核心上运行,还是我必须做其他事情?
我几乎没有所有线程都读取(尽管从未写入)的对象。潜在的问题?这些问题的解决方案?
对于实际的集群,您能否推荐将线程分发到各个节点的框架,这样我就不必自己管理(好吧,如果存在的话)?澄清:我的意思是自动将线程转换为单个节点的任务或使整个集群看起来像单个 JVM(即,它可以将线程发送到它可以访问的任何处理器)或其他任何东西。基本上,在集群上以一种有用的方式实现并行化,因为我已经将它构建到算法中,并且我的工作量很少。
奖励:大部分评估由集合比较(例如,并集、交集、包含)和一些键映射组成,以获得相关集合。我在 FORTRAN、C 和 C++ 方面的经验有限(第一个学期是科学计算学期,另外两个学期是 10 年前的 HS AP 课程)——如果我将我的用其中一种语言从 Java 前端到算法后端,我的经验水平会发现用这些语言实现这些操作会带来什么样的头痛?