我的新作品将使用Elixir语言。
我此时也是新鲜的Erlang环境。通过一些研究,我发现该平台在CPU密集型计算方面存在性能问题。
是否可以使用C替换nif
的上述情况下的Erlang,即使C代码可能比例很高?或者我们无法做到这一点。
答案 0 :(得分:4)
从Erlang运行计算密集型C代码的最简单,最安全的方法是将C代码编写为独立的可执行文件,并通过端口将其连接到Erlang。有关详细信息,请参阅http://erlang.org/doc/tutorial/c_port.html。
答案 1 :(得分:0)
注意the warning about long-running NIFs in the documentation:
正如本手册页面开头的警告文字中所提到的,本机函数返回相对较快是至关重要。很难给出允许本机函数工作的确切最长时间,但通常行为良好的本机函数是在1毫秒内返回其调用者。这可以使用不同的方法来实现。如果您完全控制要在本机函数中执行的代码,最好的方法是将工作分成多个工作块并多次调用本机函数。但是,这并不总是可行的,例如在调用第三方库时。
//App.vue <template> <HelloWorld></HelloWorld> <hello-world><hello-world> </template> import HelloWorld from 'path/to/HelloWorld' //adding .vue is optional export default { components: { HelloWorld } }
函数可用于通知运行时系统有关NIF调用的长度。除非NIF执行得非常快,否则通常总是使用它。
文档继续提出三种解决方法,&#34;产生NIF&#34;,&#34;线程NIF&#34;和&#34;脏NIF&#34;。
答案 2 :(得分:0)
还有第三种方法,您可以将您的c代码作为独立的Erlang节点运行,该节点通过Erlang节点协议进行通信。