当前位置:  开发笔记 > 编程语言 > 正文

Haskell服务器?

如何解决《Haskell服务器?》经验,为你挑选了6个好方法。

关于制作游戏服务器,似乎Erlang总是作为一种"为这种东西而构建"的语言,具有可扩展性和并发性.我没有Haskell和Erlang的经验,但从表面上看它们看起来是一样的.看看Haskell的文档,似乎它支持多处理器的可扩展性和并发性,而Haskell被认为是一种更加可靠的语言,并且具有明显更好的社区.那么,我的问题是,Haskell被认为是像Erlang一样的服务器构建解决方案吗?



1> Norman Ramse..:

这取决于您想要对服务器执行的操作.正如电信应用程序所期望的那样,Erlang擅长以非常高的并发性执行简单任务.如果您的服务器每秒钟需要大量的连接,或者一次,Erlang就是您的朋友.Erlang还为在多个服务器上分配负载提供了更好的支持.

Haskell擅长复杂的符号计算,截至2009年4月也可以处理很多线程(请参阅下面的更新).此外,Haskell有用于获取复杂的代码权更多的工具:之类的东西快速检查,SmallCheck,静态类型系统.因此,如果您的服务器正在执行复杂,有趣的事情,并且您只需使用一台服务器,那么您最好使用Haskell.


2009年4月13日更新:Don Stewart,一个可靠的消息来源,报告称"几个月前Glasgow Haskell编译器中的最后一个线程扩展错误被压扁了",并且一些用户报告使用了一百万个Haskell线程没有遇到麻烦.截至2009年1月,有一篇来自实施者的新的未发表的论文可能描述了如何实现这一目标.


2012年2月21日更新:John Hughes的公司QuviQ现在为Erlang制作QuickCheck.他们发现了许多非常有趣的错误.您可以免费下载"QuickCheck Mini"; 它与Haskell QuickCheck相当.还有一个更强大的商业版本.


几个月前GHC的最后一个(?)线程扩展问题被压扁了,并且有一些报告显示百万+线程没有问题.也就是说,Erlang的重点更多地放在分发上,而不是共享内存多核上.

2> ja...:

这些论文的基准测试表明Haskell可以与Apache竞争:

在Concurrent Haskell中开发高性能Web服务器
- Simon Marlow

结合可扩展网络服务的事件和线程:Monadic,应用程序级并发原语的实现和评估
- Peng Li Stephan A. Zdancewic(见图19)



3> mipadi..:

我没有Haskell和Erlang的经验,但从表面上看它们看起来是一样的.

Haskell和Erlang之间存在一些非常明显的差异.Erlang专为并发系统而设计.语言和虚拟机都旨在支持许多流程,而Erlang使用actor风格的系统来管理所有流程之间的通信.由于Haskell的功能性,Haskell也很容易支持并发,在Haskell中进行并发编程仍然有点困难,而且语言没有专门设置来促进这一点.

与Haskell一样,Erlang不会在进程之间共享状态,因此编写多进程软件很容易.但是Haskell和Erlang之间的编程风格有点不同,因为Erlang强调使用小进程来执行并发处理.

我喜欢Haskell - 这是我最喜欢的语言之一 - 但如果我要编写服务器软件,我可能会使用Erlang.但是,如果您更了解Haskell或者发现库支持更优越,那么在Haskell中编写服务器当然是可能的.



4> Alexey Roman..:

现在有一个新选项:使用Haskell/Erlang FFI在Haskell中编写逻辑并使用Erlang进行通信.



5> joel.neely..:

最后一次我看到,在二郎构建可扩展的服务器库和框架显得比那些哈斯克尔更成熟一些.我建议查看编程Erlang:并发世界的软件以获取有关这些的信息.



6> Alexey Roman..:

由于懒惰,在Haskell应用程序中引入内存泄漏要容易得多.长时间运行的服务器正是那种你真的不希望有任何内存泄漏的程序.

虽然我同意Haskell是一种更加可靠的语言并且编程更好,但是Erlang更容易,并且有许多专门用于这类用途的库.

我不认为有一个Haskell相当于Mnesia,编写它会很困难.您可以编写等等的Haskell版本gen_server,gen_event但它们将不会被优化和调整超过十年.


实际上,如果不使用FFI或类似的东西,就不可能引入内存泄漏:所有内存都由垃圾收集器占用并且可以恢复.你所指的是"空间泄漏",这意味着用于未评估的thunk的内存.只是评估它们(或扔掉它们)将释放内存.也就是说,处理这个问题,因为对大多数程序员来说完全不熟悉,一开始就要做相当多的工作,你应该做好计划.
Curt是绝对正确的,从技术上讲,空间泄漏与内存泄漏不同,但它们在许多无限循环迭代的程序中的行为方式相同.我会说,在Haskell程序中无意中引入空间泄漏比在C程序中的内存泄漏更容易*因为它需要仔细关注懒惰的评估顺序,这通常是不直观的.那说我是一个Haskell菜鸟 - 我认为通过练习会变得更容易.
推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有