【发布时间】:2010-02-26 01:03:41
【问题描述】:
假设我想用 Haskell 编写一个服务器。高并发,处理简单的那种。对故障具有鲁棒性并提供高可用性的那种。 Erlang 适合的那种。
什么是好的工具集,无论是框架还是原语集?
【问题讨论】:
标签: haskell concurrency io
假设我想用 Haskell 编写一个服务器。高并发,处理简单的那种。对故障具有鲁棒性并提供高可用性的那种。 Erlang 适合的那种。
什么是好的工具集,无论是框架还是原语集?
【问题讨论】:
标签: haskell concurrency io
这正是 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
您应该会发现这项任务相对容易且有趣!
【讨论】:
System.Event。如果我理解正确,它已与 ghc 7 合并,并计划用于 6.14 (hackage.haskell.org/trac/ghc/ticket/635)。对吗?
很好的起点是 Simon Peyton Jones The Awkward Squad 的开创性论文。
...我最近听到一个你可能会觉得相关的演讲。详情见galois website
【讨论】: