首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell vs JVM性能

Haskell vs JVM性能
EN

Stack Overflow用户
提问于 2011-11-19 00:03:41
回答 6查看 17.9K关注 0票数 40

我想写一个网站的后端系统(它将是一个自定义的搜索式服务)。它需要高度并发和快速。考虑到我希望并发,我计划使用函数式语言,如Haskell或Scala。

然而,速度也是一个优先事项。http://benchmarksgame.alioth.debian.org的结果似乎表明,Java几乎和C/C++一样快,Scala一般都很好,但对于大多数任务来说,Haskell的速度从慢到慢。

有没有人有使用Haskell、Scala和Java执行高并发任务的性能基准测试/经验?

我见过的一些网站表明,Scala存在内存泄漏,这对像这样的长时间运行的服务来说可能是可怕的。

我应该用什么来写我的服务,或者在选择之前我应该考虑什么(性能和并发是最高优先级)?

谢谢

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-11-19 05:06:36

这个问题是关于使用GHC编译的代码与运行在JVM上的代码的性能。但还有很多其他因素在起作用。

People

  • 有没有团队在做这件事,或者只有你一个?
    • 这个团队对这些语言的熟悉程度/适应程度如何?
    • 这门语言你(所有人)都想在learning?

上投入时间吗?

  • 谁来维护它?

Behavior

  • 这个项目预计能存在多长时间?
  • 这个程序什么时候会进行停机时间处理?
    • 有没有知名的库可以在这方面帮助你?
    • 你愿意使用你自己的库吗?
      • 这在language?

    中会有多难

社区

  • 您计划从开源中汲取多少?
  • 您计划为开源做出多少贡献?
  • 您可能会使用of

的开源组件上的StackOverflow

  • on irc

  • 上的社区
  • 有多活跃和有帮助

工具

  • 你需要集成开发环境吗?
  • 你需要代码测试吗?
  • 该语言的文档有多大帮助?
  • 你需要代码测试吗?
  • 对于您将使用的库?
  • 有没有工具可以满足您甚至还不知道自己拥有的需求?

还有其他100万零1个你应该考虑的因素。无论您选择Scala、Java还是Haskell,我几乎可以保证您能够满足您的性能需求(也就是说,在任何一种语言中都可能需要大致相同的智能来满足您的性能需求)。Haskell社区是出了名的有帮助,我在Scala社区的有限经验与Haskell几乎是一样的。就我个人而言,我开始发现与至少具有一流函数的语言相比,Java相当令人讨厌。此外,还有更多的Java程序员,导致互联网上关于Java的信息激增,无论是更好的(更有可能是你需要知道的)还是更糟糕的(有很多噪音需要筛选)。

tl;dr我非常确定性能是大致相同的。考虑其他标准。

票数 22
EN

Stack Overflow用户

发布于 2011-11-19 00:48:00

您应该选择您最了解的语言,并且对您要实现的目标具有最好的库支持(请注意,Scala可以使用Java库)。Haskell很可能满足您的需求,如果您学习了足够的知识来有效地使用它,Scala也是如此。如果你对这门语言不是很了解,就很难写出高性能的代码。

据我观察,与Haskell相比,使用Scala可以编写出更快、更紧凑、更高性能的并行代码。然而,您不能只使用这两种语言中最明显的语言,并期望它会很快出现。

Scala不再有与参与者相关的内存泄漏,除非在以下情况下使用默认的参与者:CPU有限,因此创建消息的速度比消耗消息的速度快,或者忘记处理所有消息。这是一种设计选择,而不是bug,但对于某些类型的容错应用程序来说,这可能是错误的设计选择。Akka通过使用actors的不同实现来克服这些问题。

票数 10
EN

Stack Overflow用户

发布于 2011-11-19 02:14:57

看一下这种面对面的比较。对于某些问题,ghc和java7-server非常接近。对于同样多的人来说,有2倍的差异,而只有一个人有5倍的差异。这个问题是k-核苷酸,GHC版本使用了一个手工滚动的可变哈希表,因为在stdlib中没有一个好的哈希表。我敢打赌,一些新的数据结构提供了比现在更好的哈希表。

在任何情况下,如果你的问题更像第一组问题(纯计算),那么没有太大的性能差异,如果它更像第二组问题(通常使用必要的变异),那么即使使用变异,你也可能会注意到一些性能差异。

但同样,这真的取决于你在做什么。如果你正在搜索一个大型的数据集,你往往会受到IO的限制。如果您正在优化不可变结构的遍历,haskell将是不错的选择。如果你正在改变一个复杂的结构,那么你可能(取决于)支付更多。

此外,GHC的轻量级绿色线程可以使某些类型的服务器应用程序非常高效。因此,如果服务/交换本身倾向于成为瓶颈,那么GHC可能会占据上风。

速度是值得关注的,但真正的区别是使用任何编译语言和任何脚本语言之间的区别。除此之外,只有在某些HPC情况下,我们所讨论的差异才是真正重要的。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8185282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档