【发布时间】:2011-04-01 17:11:44
【问题描述】:
今天我正在做 Programming Erlang 一书中的线程环练习,并在 Google 上搜索其他解决方案以进行比较。我发现语言枪战与benchmark 有完全相同的问题。我的印象是,这是 Erlang 应该很快的领域,但事实证明 C 和 C++ 再次名列前茅。我的怀疑是 C/C++ 程序没有遵循“将令牌从线程传递到线程”的规则。在阅读它们之后,它们似乎都在操纵一些与 Erlang 代码不同的共享内存和全局变量,但我可能是错的。
我的问题是:他们是在做同样的事情,还是 C/C++ 代码在概念上与 Erlang 代码不同(而且更快)?
还有一个问题:为什么在解决方案非常相似的情况下 Haskell 比 Erlang 快?
【问题讨论】:
-
其中一些比较是苹果和橙子的比较。这样做的原因是,如果您只想让事情快速循环,那么您当然可以在 C 和 C++ 中更快地做到这一点。恕我直言,Erlang 处理的不仅仅是“在进程之间发送令牌”(它是进程而不是线程;))。不久前我写了一篇关于其中一些差异的文章;值得一试:forum.trapexit.org/viewtopic.php?t=15194 和 trapexit.org/Process_Ring_Across_Nodes
-
这是一个很好的例子,你给出的定义是我对所有解决方案的期望。有没有人尝试用另一种语言重写它,有什么结果吗?另外,你能想到一些 Erlang 在速度方面表现出色的单节点基准测试吗?
-
Joe Armstrong 的观点很简单,“Erlang 中休眠进程之间的消息传递速度非常快……Java 大约慢 5 到 10 倍。” (Java 程序员已经减少了这种差异。)[Java 线程和 Erlang 进程的性能测量 1998-11-02]
标签: c++ c haskell concurrency erlang