是否可以将 Erlang 和 C 语言混合编程与 C 语言以高比例使用?



我的新作品将使用Elixir语言。

在这一点上,我也是一个新鲜的 Erlang 环境。通过一些研究,我发现该平台在CPU密集型计算的性能方面存在一些问题。

在上述情况下,是否可以使用 C 替换 Erlangnif即使 C 代码的比例可能很高?或者有一些限制我们不能这样做。

从 Erlang运行计算密集型 C 代码的最简单、最安全的方法是将 C 代码编写为独立的可执行文件,并通过端口将其连接到 Erlang。有关详细信息,请参阅 http://erlang.org/doc/tutorial/c_port.html。

请注意文档中有关长时间运行的 NIF 的警告:

如本手册页开头的警告文本所述,本机函数的返回速度相对较快至关重要。很难给出允许本机函数工作的确切最长时间,但通常行为良好的本机函数会在 1 毫秒内返回给其调用方。这可以使用不同的方法来实现。如果您完全控制要在本机函数中执行的代码,则最佳方法是将工作划分为多个工作块并多次调用本机函数。但是,这并不总是可行的,例如在调用第三方库时。

enif_consume_timeslice()函数可用于通知运行时系统有关 NIF 调用的长度。除非 NIF 执行得非常快,否则通常始终使用它。

文档继续提出了三种解决方法,"产生NIF","线程NIF"和"脏NIF"。

还有第三种方法,您可以将 c 代码作为独立的 Erlang 节点运行,该节点通过 Erlang 节点间 procotol 进行通信。

请参阅:http://erlang.org/doc/tutorial/cnode.html

最新更新