我想写一个网站的后端系统(它将是一个自定义的搜索式服务)。它需要高度并发和快速。考虑到我希望并发,我计划使用函数式语言,如Haskell或Scala。
然而,速度也是一个优先事项。http://benchmarksgame.alioth.debian.org的结果似乎表明,Java几乎和C/C++一样快,Scala一般都很好,但对于大多数任务来说,Haskell的速度从慢到慢。
有没有人有使用Haskell、Scala和Java执行高并发任务的性能基准测试/经验?
我见过的一些网站表明,Scala存在内存泄漏,这对像这样的长时间运行的服务来说可能是可怕的。
我应该用什么来写我的服务,或者在选择之前我应该考虑什么(性能和并发是最高优先级)?
谢谢
发布于 2011-11-19 05:06:36
这个问题是关于使用GHC编译的代码与运行在JVM上的代码的性能。但还有很多其他因素在起作用。
People
上投入时间吗?
Behavior
中会有多难
社区
的开源组件上的StackOverflow
工具
还有其他100万零1个你应该考虑的因素。无论您选择Scala、Java还是Haskell,我几乎可以保证您能够满足您的性能需求(也就是说,在任何一种语言中都可能需要大致相同的智能来满足您的性能需求)。Haskell社区是出了名的有帮助,我在Scala社区的有限经验与Haskell几乎是一样的。就我个人而言,我开始发现与至少具有一流函数的语言相比,Java相当令人讨厌。此外,还有更多的Java程序员,导致互联网上关于Java的信息激增,无论是更好的(更有可能是你需要知道的)还是更糟糕的(有很多噪音需要筛选)。
tl;dr我非常确定性能是大致相同的。考虑其他标准。
发布于 2011-11-19 00:48:00
您应该选择您最了解的语言,并且对您要实现的目标具有最好的库支持(请注意,Scala可以使用Java库)。Haskell很可能满足您的需求,如果您学习了足够的知识来有效地使用它,Scala也是如此。如果你对这门语言不是很了解,就很难写出高性能的代码。
据我观察,与Haskell相比,使用Scala可以编写出更快、更紧凑、更高性能的并行代码。然而,您不能只使用这两种语言中最明显的语言,并期望它会很快出现。
Scala不再有与参与者相关的内存泄漏,除非在以下情况下使用默认的参与者:CPU有限,因此创建消息的速度比消耗消息的速度快,或者忘记处理所有消息。这是一种设计选择,而不是bug,但对于某些类型的容错应用程序来说,这可能是错误的设计选择。Akka通过使用actors的不同实现来克服这些问题。
发布于 2011-11-19 02:14:57
看一下这种面对面的比较。对于某些问题,ghc和java7-server非常接近。对于同样多的人来说,有2倍的差异,而只有一个人有5倍的差异。这个问题是k-核苷酸,GHC版本使用了一个手工滚动的可变哈希表,因为在stdlib中没有一个好的哈希表。我敢打赌,一些新的数据结构提供了比现在更好的哈希表。
在任何情况下,如果你的问题更像第一组问题(纯计算),那么没有太大的性能差异,如果它更像第二组问题(通常使用必要的变异),那么即使使用变异,你也可能会注意到一些性能差异。
但同样,这真的取决于你在做什么。如果你正在搜索一个大型的数据集,你往往会受到IO的限制。如果您正在优化不可变结构的遍历,haskell将是不错的选择。如果你正在改变一个复杂的结构,那么你可能(取决于)支付更多。
此外,GHC的轻量级绿色线程可以使某些类型的服务器应用程序非常高效。因此,如果服务/交换本身倾向于成为瓶颈,那么GHC可能会占据上风。
速度是值得关注的,但真正的区别是使用任何编译语言和任何脚本语言之间的区别。除此之外,只有在某些HPC情况下,我们所讨论的差异才是真正重要的。
https://stackoverflow.com/questions/8185282
复制相似问题