【发布时间】:2012-01-01 09:15:46
【问题描述】:
我想为一个网站编写一个后端系统(它将是一个自定义的搜索式服务)。它需要高度并发和快速。考虑到我对并发的期望,我计划使用 Haskell 或 Scala 等函数式语言。
不过,速度也是重中之重。 http://benchmarksgame.alioth.debian.org 结果似乎表明 Java 几乎与 C/C++ 一样快,Scala 通常相当不错,但对于大多数任务,Haskell 的范围从慢到慢很多。
有没有人有使用 Haskell、Scala 和 Java 来执行高并发任务的性能基准测试/经验?
我看到的一些网站表明 Scala 存在内存泄漏,这对于像这个这样的长期运行的服务来说可能是可怕的。
我应该用什么来编写我的服务,或者在选择之前我应该考虑什么(性能和并发性是最高优先级)?
谢谢
【问题讨论】:
-
您有任何理由假设您的问题与那些基准测试解决的问题类似吗?您是否有任何理由假设您实际上会优化您的代码,就像这些基准已经优化(也就是说,一大堆)?如果没有,这些基准对您来说毫无价值。另请注意,在最坏的情况下,Haskell 基准测试可能比 Java 慢 10 倍,但对于大多数 Scala 基准测试来说,差距要小得多。
-
如果你评估 Haskell,那么请使用 GHC v7,它使用 LLVM donsbot.wordpress.com/2010/02/21/… 快得多的代码。Haskell 与其他任何东西相比应该会有巨大的性能提升由于 LLVM 进行了评估。请注意,目前仍有发行版仅提供 GHC v6,尤其是适用于 Mac OS X 的 MacPorts。
-
不用担心 Scala 的内存泄漏。它曾经是内置actor实现的问题,但我相信这个问题现在已经解决了,无论如何Akka正在成为actor的首选库。
-
@igouy:是的,但据我所知,他们没有使用 LLVM 代码生成器,必须使用
-fllvm选项显式启用。 -
@delnan - “你有什么理由假设你实际上会优化你的代码,就像这些基准已经优化(也就是说,一大堆)?”又名你能像唐斯图尔特一样写出像唐斯图尔特一样好的 Haskell 吗?-)