Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
本机和字节码Erlang模块之间的性能差异是什么?_Erlang - Fatal编程技术网

本机和字节码Erlang模块之间的性能差异是什么?

本机和字节码Erlang模块之间的性能差异是什么?,erlang,Erlang,本机和字节码Erlang模块之间的性能差异是什么?本机应该更快。我不认为有一个恒定的因素,它有多快;基于机器/体系结构等等,这肯定是不同的。对于实际做了大量工作的代码(而不是花费大部分时间等待消息或调用内置函数),典型的加速比将在8到20倍之间 这在很大程度上取决于代码的具体功能:浮点操作上的循环或二进制文件/位字符串的操作往往会获得最佳加速,而更普通的元组和列表操作代码可能不会获得超过8-10倍的速度 另外,请记住,如果循环体主要调用其他未编译为本机代码的模块,则编译为本机代码的循环不会快得多

本机和字节码Erlang模块之间的性能差异是什么?

本机应该更快。我不认为有一个恒定的因素,它有多快;基于机器/体系结构等等,这肯定是不同的。

对于实际做了大量工作的代码(而不是花费大部分时间等待消息或调用内置函数),典型的加速比将在8到20倍之间

这在很大程度上取决于代码的具体功能:浮点操作上的循环或二进制文件/位字符串的操作往往会获得最佳加速,而更普通的元组和列表操作代码可能不会获得超过8-10倍的速度

另外,请记住,如果循环体主要调用其他未编译为本机代码的模块,则编译为本机代码的循环不会快得多


(我已经有一段时间没有看到新的基准测试结果了,但我认为没有什么变化。)

已经有一些正确的答案,但我认为您实际上需要衡量特定功能的性能。如果关键区域的速度比字节码版本快得多,则可能仍需要清理模块,使其具有故障安全性。

性能方面,HiPE在模块内进行优化,而不是模块间调用。这可以产生非常好的加速比(x4..x10似乎是常用的数字),但是正如其他人所回答的,如果代码花费大量时间等待外部事件,则加速比可以忽略不计


需要注意的是HiPE显然不支持某些渐进式语言特性,例如参数化模块。这意味着一些最新的应用程序(如MochiWeb)将根本无法运行。考虑到这一点。

在相关注释中,您可能会发现这篇文章很有用:

在描述因使用HiPE而产生的限制时,它还进行了一些(非常基本的)速度比较

我发现最值得注意的两件事:

  • 旧的HiPE代码在重新加载时不会消失,而是永远挂在那里。所以,如果您处在一个频繁重新加载代码的环境中,那么会出现一个小内存泄漏。通常不是什么问题,但如果您的节点没有一个好的“退出策略”(该策略允许您无缝地将节点从集群中取出,并不时用新节点替换它们——当您想要升级到更新的BEAM-VM版本时,这也是非常宝贵的)
  • 在本机代码和解释代码之间切换时会有一些开销,因此您应该尽可能避免这种情况(通过编译与同一编译器频繁交互的所有模块)

我在网上找不到太多关于这方面的信息,所以我想知道我是否可以在本地机器上获得10倍的速度提升。我也不知道任何来源。是的,我想那是你在瑞典电脑前的照片抱歉,我不得不问,但是很多人在StackOverflow上发帖时没有真正做他们所说的,只是简单地传递“heresay”,但你看起来像是真正的交易