如果我使用erlang作为一个spawner进程,它会执行主要功能,这些功能对于与服务器通信和处理服务器 - 客户端通信消息而言速度并不太快。
然后我选择在erlang中生成一个进程并从中运行c / c ++代码,这会使我的代码更快吗?
与c / c ++中的等价物相比,erlang会更有效地处理多线程吗?
如果我要从erlang中生成许多c节点,它们是否会堆叠在单个核心上,或者是erlang会处理多线程。这是我想知道的主要观点。
答案 0 :(得分:9)
你在谈论你的问题中有两个不同的概念:运行C / C ++代码和C节点的Erlang进程。
从Erlang内部运行的C或C ++代码根本没有安排。事实上,它会阻止当前CPU内核的Erlang调度程序,因此在C-land中运行时间很长,很可能会破坏你的(Erlang)调度。
例如,在四核处理器上,Erlang默认会创建4个调度程序线程,每个线程将占用一个核心。任何运行C代码的进程都会阻塞它所分配的调度程序,直到该代码执行完毕为止。
运行C节点时,您完全靠自己。 Erlang节点根本不知道C节点的调度,它只关心它自己的调度。当然,您可以创建自己的调度,例如将一个核心专用于C节点,将三个核心专用于Erlang节点或类似的东西。
答案 1 :(得分:1)
Erlang只使用自己的轻量级进程来管理并发,这些进程基于不线程。它通常只运行几个线程来为它可以产生的数千个进程提供服务,当启用SMP时,每个CPU /核心通常只有一个线程。
它绝对不了解任何外部线程,任何外部进程只会增加通信开销和管理外部进程中内存和资源的复杂性。