2011-04-27 46 views
3

如果我使用erlang作为spawner进程,它会执行一些主要的功能,这些功能对于与服务器进行通信和处理服务器 - 客户端通信消息来说不是速度至关重要的。Erlang和C/C++线程

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

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

如果我从erlang产生许多c节点,它们会叠加在一个单独的内核上,还是erlang会处理多线程。这是我想知道的主要观点。

回答

9

您在您的问题中讨论了两个不同的概念:Erlang处理运行C/C++代码和C节点。

从Erlang内部运行的C或C++代码根本没有安排。事实上,它会阻塞当前CPU内核的Erlang调度程序,因此在C-land中运行很长时间很可能会使您的(Erlang)调度变得困难。

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

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

1

Erlang只使用自己的轻量级进程来管理并发,这些进程是基于线程的而不是。它通常只运行几条线程,为成千上万的进程提供服务,当启用SMP时,通常每个CPU /内核只有一个线程。

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