Scala与c++的分布式图形处理
Scala vs. C++ for a distributed graph processing
对于图的并行处理,如最短路径计算,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相关文章:
- 警告处理为错误这里有什么问题
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用流处理接收到的数据
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 基于多个条件处理地图中的所有元素
- 如何用数字处理log(0)
- SSL上的`curl_easy_send`和`curl_asy_recv`:如何处理`CURLE_AGAIN`
- C++图形类指针混淆
- 错误处理.将系统错误代码映射到泛型
- 从文本文件中读取时钟时间和事件时间并进行处理
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 分布式 dll 和 c++ 对象 - 某些库如何处理此问题
- 在opengl中处理三维或二维图形的点击
- Scala与c++的分布式图形处理
- 用于处理网格上的分布式矩阵的c++库
- 处理图形的类的最佳方法