Erlang and C/C++ Threading

Erlang and C/C++ Threading

本文关键字:C++ Threading and Erlang      更新时间:2023-10-16

如果我使用erlang作为一个产卵进程,它会做一些对速度不太重要的主要功能,比如与服务器通信和处理服务器-客户端通信消息。

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

erlang会比c/c++更有效地处理多线程吗?

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

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

在Erlang内部运行的

C或c++代码根本不被调度。事实上,它会阻塞当前CPU核心的Erlang调度器,因此在C-land中长时间运行很可能会搞砸你的(Erlang)调度。

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

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

Erlang只使用自己的轻量级进程来管理并发性,这些进程是而不是基于线程的。它通常只运行几个线程来服务它可以生成的数千个进程,在启用SMP时,每个CPU/核心通常只有一个线程。

它绝对不知道任何外部线程,任何外部进程只会增加通信开销和管理外部进程的内存和资源的复杂性。