如果我将 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/