【问题标题】:Haskell as a highly concurrent serverHaskell 作为高并发服务器
【发布时间】:2010-02-26 01:03:41
【问题描述】:

假设我想用 Haskell 编写一个服务器。高并发,处理简单的那种。对故障具有鲁棒性并提供高可用性的那种。 Erlang 适合的那种。

什么是好的工具集,无论是框架还是原语集?

【问题讨论】:

    标签: haskell concurrency io


    【解决方案1】:

    这正是 Haskell 擅长的。并且它具有出色的多核并行支持,因此当您使用更多线程时,您可以轻松利用额外的内核。不过请记住,Haskell 的目标是在多核上实现出色的性能,而 Erlang 则有点不同,它更多地强调分布式系统,而不是过多的原始性能(例如,参见基准测试游戏,http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=ghc&lang2=hipe Haskell 几乎总是更快,并且使用更少的内存)。

    现在,开始吧:

    您应该会发现这项任务相对容易且有趣!

    【讨论】:

    • 事件库的自述文件表明它已被合并到 ghc 基础库中。我在哪里可以找到它? (这是我与 haskell 的第一天;))。我使用 GHC 6.12.1。
    • 好的,找到了System.Event。如果我理解正确,它已与 ghc 7 合并,并计划用于 6.14 (hackage.haskell.org/trac/ghc/ticket/635)。对吗?
    • 可能值得注意的是,Haskell 有独立的并行和并发设施。
    • epoll 现在已内置到运行时中。无需查看单独的事件库。如果与 Erlang 相比,haskell-distributed.github.io 现在也具有高度相关性。
    【解决方案2】:

    很好的起点是 Simon Peyton Jones The Awkward Squad 的开创性论文。

    ...我最近听到一个你可能会觉得相关的演讲。详情见galois website

    【讨论】:

    • @Kevin,差不多,但是你弄错了一些细节。首先,演讲者是来自 Google/Youtube 的 Johan Tibell,并且 select() 本身并不是一个大问题(同时拥有 1024 个句柄有点少见)——无论如何,你不需要等待,事件库,使用 epoll,已经可用:github.com/tibbe/event 你可以在这里查看详细信息:donsbot.wordpress.com/2010/01/17/…
    • 我非常不同意“为了在性能前端服务器端真正杀死它而缺少很多东西”——性能非常好,今天几百万个线程很容易实现.我们一直在 Galois 构建并发服务器并对其进行基准测试,性能几乎不是问题——相比之下,Erlang 的开销令人震惊(它针对的是不同的用例:分布式系统,而不是高性能服务器)。
    • 我想我会把脚从嘴里拿出来,然后把帖子编辑回我开始和尴尬的小队的地方。
    • 很抱歉跳到这样的评论上,这是漫长的一天:}
    • 喜欢你的堆栈下溢头像 :)
    猜你喜欢
    • 2011-02-04
    • 2021-05-26
    • 2012-07-27
    • 2010-09-28
    • 2016-05-26
    • 2013-05-01
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    相关资源
    最近更新 更多