【问题标题】:When I make a C plugin for erlang will it take full advantage of the spawning system? Does it block?当我为 erlang 制作 C 插件时,它会充分利用生成系统吗?它会阻塞吗?
【发布时间】:2010-12-16 16:27:42
【问题描述】:

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

【问题讨论】:

    标签: erlang


    【解决方案1】:

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

    要么你正在编写一个基本上分叉系统进程的端口。

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

    在这两种情况下,您都可以利用多核 CPU。第一种情况只是依赖于操作系统将操作系统进程放置在不同的 CPU 上(任何体面的 SMP 操作系统都应该具备这种能力)。

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

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

    【讨论】:

    • 你也可以写一个NIF。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    相关资源
    最近更新 更多