Scala与c++的分布式图形处理

Scala vs. C++ for a distributed graph processing

本文关键字:分布式 图形处理 c++ Scala      更新时间:2023-10-16

对于图的并行处理,如最短路径计算,Scala会优于c++吗?如果没有,会慢多少(我假设Scala并发性比c++"更容易"编写,因为c++没有对这些事情的标准支持)

我现在正在考虑学习Scala,既是为了学习一门新语言,也是因为它似乎有很好的并发支持。一旦我完成了,我正在考虑编写一个分布式图形库来练习Scala,并且供我自己使用,但是如果c++要更快,并且更容易编写代码的好处不值得在性能问题上进行权衡,那么我将不得不重新考虑这个任务。

我建议使用Scala而不是c++,原因如下:

  • 并发性——就像你说的,JVM上有很好的并发性支持,Scala是一个很好的语言,可以从中受益。这并不是说你不能在c++中编写并发代码,但你会发现在Scala中"开箱即用"要容易得多。
  • 垃圾收集—与其他内存管理方法相比,许多图算法从垃圾收集中受益匪浅。同样,JVM上的垃圾收集非常出色(比c++世界中的任何都要好),并且将使您的算法更容易编写。
  • JIT编译器的质量—对于遍历堆内存中的对象图,我怀疑好的c++代码和JVM JIT生成的代码之间会有任何明显的性能差异。JVM针对这种用法进行了大量优化。

当然,可能在c++中编写非常高性能的代码。在某些情况下,手工调整的C/c++代码可以胜过JIT(例如,当你可以证明不需要时,可以避免需要数组边界检查或空指针检查)。或者您可以编写自己的内存分配器,专门用于图形处理,理论上可能优于JVM中的通用垃圾收集器(尽管如果您想尝试这个,您最好是一个真正的天才....)

总的来说,用c++写所有东西要复杂得多,而且理论上能够实现的边际性能改进几乎肯定不值得付出努力。

Twitter刚刚开源了一个用Scala编写的Graph Processing库。

https://github.com/twitter/cassovary