当我为erlang制作一个C插件时,它会充分利用繁殖系统吗?它堵住了吗?

当我为erlang制作一个C插件时,它会充分利用繁殖系统吗?它堵住了吗?,erlang,Erlang,我有一个消耗大量CPU的程序。我制作了一个可以与erlang交互的C插件。我使用SMP+16生成16个线程。与多核上的pthreads相比,它会给我类似的性能吗?线程不需要相互通信。erlang上下文中没有明确定义“C插件” 或者您正在编写一个基本上是分叉系统进程的端口 或者您正在编写一个链接入驱动程序,该驱动程序在与Erlang vm相同的上下文中运行 在这两种情况下,您都可以利用多核cpu。第一种情况只是依靠操作系统将操作系统进程放在不同的CPU上(任何体面的SMP操作系统都应该能够做到这一

我有一个消耗大量CPU的程序。我制作了一个可以与erlang交互的C插件。我使用SMP+16生成16个线程。与多核上的pthreads相比,它会给我类似的性能吗?线程不需要相互通信。

erlang上下文中没有明确定义“C插件”

或者您正在编写一个基本上是分叉系统进程的端口

或者您正在编写一个链接入驱动程序,该驱动程序在与Erlang vm相同的上下文中运行

在这两种情况下,您都可以利用多核cpu。第一种情况只是依靠操作系统将操作系统进程放在不同的CPU上(任何体面的SMP操作系统都应该能够做到这一点)

在第二种情况下,我不太确定,但我希望驱动程序也运行在不同的CPU内核上。除非你有强烈的理由使用链接驱动程序,并且你确切地知道你在做什么,否则出于复杂性和稳定性的原因,我建议不要使用链接驱动程序。如果端口崩溃,Erlang将收到通知并可以重新启动它或采取其他预防措施。如果一个驱动程序崩溃,整个Erlang虚拟机将被强制关闭


主要的问题是您想在Erlang中解决问题的哪一部分,如果您只使用Erlang来启动“插件”,那么只需从shell启动进程就可以轻松解决这一问题,因为您的“线程”不需要通信,为什么不通过shell脚本在命令行和fork工作进程上传递参数?

您也可以编写NIF。