c++ - 线程环基准

标签 c++ c haskell concurrency erlang

今天我正在做Programming Erlang一书中的线程环练习,并在谷歌上搜索其他解决方案以进行比较。我发现语言枪战与 benchmark 有完全相同的问题。 .我的印象是这是 Erlang 应该很快的领域,但事实证明 C 和 C++ 再次领先。我怀疑 C/C++ 程序没有遵循“将 token 从一个线程传递到另一个线程”的规则。在阅读它们之后,它们似乎都操作了一些共享内存和全局变量,这与 Erlang 代码不同,但我可能是错的。

我的问题是:它们是在做同样的事情,还是 C/C++ 代码在概念上与 Erlang 不同(而且速度更快)?

还有一个问题:当解决方案非常相似时,为什么 Haskell 比 Erlang 更快?

最佳答案

C 版本使用的是 LWP,我认为它是一个用户空间线程库。这在多大程度上“不公平”尚待讨论:我会看看它是否支持真正的抢先式并发,在某种意义上你可以在一个线程中进行阻塞系统调用而不阻塞所有其他线程(你可以用 Haskell 做这个,你能用 Erlang 做吗?)。

Haskell 的线程比 Erlang 的稍微轻量,因为据我所知,Erlang 线程带有本地堆(在标准实现中),而 Haskell 线程都共享同一个堆。

关于c++ - 线程环基准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3532058/

相关文章:

haskell - 'signum' 在 Haskell 中用于有序数字类型的用例

haskell - 您可以编写一个类型函数来反转约束吗?

haskell 错误: cannot derive well-kinded instance/kind-mismatch

c++ - boost 矩阵动态大小扩展

C++ 复制对象

c - 为函数内部结构体的字符数组指针分配内存

c - C 编程中具有两个变量(一个是指针)的循环

c++ - 在多个线程之间安全地共享一个结构

c++ - Eigen 错误 : please_protect_your_min_with_parentheses

c - 指针运行时错误