首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Erlang -C和Erlang

Erlang -C和Erlang
EN

Stack Overflow用户
提问于 2010-08-21 13:25:22
回答 9查看 5.6K关注 0票数 7

erlang中有一些公共的库函数,它们比c中的等效函数慢得多。

有没有可能让c代码执行二进制解析和数字处理,并让erlang衍生进程来运行c代码?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-08-24 17:27:35

当然,在极端情况下,经过优化后,C会更快。如果你说的更快是指跑得更快。

到目前为止,Erlang编写起来要快得多。根据您对速度的要求,Erlang可能“足够快”,它将为您节省在C中搜索bug的时间。

C代码只有在优化后才会更快。如果你在C和Erlang上花费相同的时间,你会得到大致相同的速度(请注意,我在这个时间估计中计算了调试和修复错误的时间。这在Erlang中会少得多)。

所以:

代码语言:javascript
复制
faster writing = Erlang
faster running (after optimisations) = C
faster running without optimisations = any of the two

选你所选。

票数 4
EN

Stack Overflow用户

发布于 2015-12-26 23:20:31

基于Erlang FAQ有两个粗略的经验法则

主要涉及数字处理和数据处理的

  1. 代码的运行速度将比同等的C程序慢10倍。这包括几乎所有的“微基准测试”。

  1. 花费大部分时间与其他系统通信、从故障中恢复并做出复杂决策的大型系统,其运行速度至少与同等的C程序一样快。

然而,对于Erlang缺乏数字处理性能,有一些官方解决方案:

  • Native Implemented Function

用C语言实现一个函数并将其对象代码加载到Erlang虚拟机中,使其类似于标准的Erlang函数,但具有本机性能。

示例:EvedisBitcaskElevelDB

  • Port

通过标准输入和输出文件描述符从Erlang虚拟机到外部OS进程的面向字节的接口。从Erlang的角度来看,与此端口的通信是通过消息传递进行的。

  • Port Driver

一个动态链接的C对象文件,加载到Erlang虚拟机中,就像一个端口。从Erlang的角度来看,与这个端口驱动程序的通信是通过消息传递进行的。

示例:OTP_InetENanomsgP1_TLS

  • C Node

您可以简单地将Erlang运行时升级到分布式节点。这样,就有了用C实现Erlang运行时的规范,并通过单个接口与Erlang节点通信。

上述所有解决方案都有自己的优缺点,需要非常小心地使用。

票数 3
EN

Stack Overflow用户

发布于 2010-08-21 19:30:14

首先用Erlang编写系统的整个逻辑,然后用C实现处理二进制文件。使用NIF(它是C语言的一种接口)对系统的其余部分非常直接和透明。这是另一个关于与C Run C Code Block in Erlang对话的帖子。

在使用C之前,请确保您已经对当前的实现进行了基准测试。它有可能满足您的需求,尤其是最新的Erlang/OTP发行版(R14),它引入了对二进制处理的极大增强。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3536459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档