Erlang - 性能

在谈论 Erlang 性能时需要注意以下几点。

  • Funs 非常快 − Funs 在 R6B 中被赋予了自己的数据类型,并在 R7B 中得到了进一步优化。

  • 使用 ++ 运算符 − 需要以正确的方式使用该运算符。 以下示例是执行 ++ 操作的错误方法。

示例

-module(helloworld). 
-export([start/0]). 

start()->
   fun_reverse([H|T]) ->
   fun_reverse(T)++[H]; 
   fun_reverse([]) ->
   [].

当 ++ 运算符复制其左操作数时,结果会被重复复制,从而导致复杂度呈二次方。

  • 使用字符串 − 如果处理不当,字符串处理可能会很慢。 在 Erlang 中,您需要更多地考虑如何使用字符串并选择合适的表示形式。 如果您使用正则表达式,请使用 STDLIB 中的重新模块,而不是过时的正则表达式模块

  • BEAM 是基于堆栈的字节码虚拟机 − BEAM 是一个基于寄存器的虚拟机。 它有 1024 个虚拟寄存器,用于保存临时值以及在调用函数时传递参数。 需要在函数调用中存活的变量被保存到堆栈中。 BEAM 是一个线程代码解释器。 每条指令都是直接指向可执行 C 代码的字,使得指令调度非常快。