c++ - Erlang 和 C/C++ 线程

标签 c++ multithreading erlang

如果我将 erlang 用作 spawner 进程,它会执行对速度不太关键的主要功能,例如与服务器通信和处理服务器-客户端通信消息。

然后我选择在 erlang 中生成一个进程并从中运行 c/c++ 代码,这会让我的代码更快吗?

erlang 是否会比 c/c++ 中的等价物更有效地处理多线程?

如果我要从 erlang 生成许多 c 节点,它们会堆叠在单个核心上还是 erlang 会处理多线程。这是我想知道的重点。

最佳答案

您在问题中谈到了两个不同的概念:运行 C/C++ 代码的 Erlang 进程和 C 节点。

从 Erlang 内部运行的 C 或 C++ 代码根本没有被调度。事实上,它会阻塞当前 CPU 内核的 Erlang 调度程序,因此在 C 区运行时间过长很可能会扰乱您的 (Erlang) 调度。

例如,在四核处理器上,Erlang 默认会创建 4 个调度程序线程,每个线程占用一个内核。任何运行 C 代码的进程都将阻塞分配给它的调度程序,直到该代码执行完毕。

运行 C 节点时,您完全靠自己。 Erlang节点根本不知道C节点的调度,它只关心自己的调度。当然,您可以创建自己的调度,例如将一个内核专用于 C 节点,将三个内核专用于 Erlang 节点或类似的东西。

关于c++ - Erlang 和 C/C++ 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5799699/

相关文章:

java - 取消javax.swing框架中的长任务

erlang - EUnit 的assertMatch 中存在多个子句?

c++ - 尝试通过 D3DXCreateCylinder 在 directx 中绘制圆柱体

c++ - OpenCV C++ 视频捕获似乎不起作用

java - 如何在多线程环境中异步登录?

Erlang - 在外部文件中搜索特定字符串,如果不存在则追加文件

include - Erlang:无法包含 header

c++ - 为 Crypto++ 构建和链接测试代码

c++ - boost 序列化和 double

c# - 我如何等待所有其他线程完成它们的任务?