Haskell 作为高并发服务器

标签 haskell concurrency io

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

一套好的工具,无论是框架还是原语,从什么开始?

最佳答案

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

现在,开始:

  • 您可以从 Real World Haskell 中的示例开始,了解 forkIO 和 Haskell 的轻量级线程,http://book.realworldhaskell.org/read/concurrent-and-multicore-programming.html
  • GHC 关于并发工具的文档,http://haskell.org/haskellwiki/GHC/Concurrency
  • 要查看大量、可扩展的网络代码的库是事件库:http://github.com/tibbe/event这使得使用 epoll 作为从网络接受事件的方法变得很容易。这是一个简单的例子:http://donsbot.wordpress.com/2010/01/17/playing-with-the-new-haskell-epoll-event-library/
  • 回到基础,请参阅 Simon Marlow 关于构建并发 Web 服务器的教程:http://www.haskell.org/~simonmar/bib/webserverjfp_abstract.html

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

    关于Haskell 作为高并发服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2338850/

    相关文章:

    C++ 编译器找不到文件

    Haskell - 与数据类型匹配的模式

    haskell - 在 Haskell 中将字符串转换为文本

    C++ - 这些线程是否在 for 循环完成后被销毁

    ios - 为什么 DISPATCH_QUEUE_CONCURRENT 创建的两个并发队列不能同时运行?

    java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

    Haskell 任意类型类实例返回类型

    haskell - 关于映射到多参数函数的最终结果

    java - 多核场景下编写java程序的技巧

    c++ - 简单的方法来检查istream中是否有待处理的数据