Говоря о производительности, следует отметить следующие моменты, касающиеся Erlang.
-
Funs очень быстрые — Funs получил собственный тип данных в R6B и был дополнительно оптимизирован в R7B.
-
Использование оператора ++ — этот оператор должен использоваться правильно. В следующем примере показан неправильный способ выполнения операции ++.
Funs очень быстрые — Funs получил собственный тип данных в R6B и был дополнительно оптимизирован в R7B.
Использование оператора ++ — этот оператор должен использоваться правильно. В следующем примере показан неправильный способ выполнения операции ++.
пример
-module(helloworld). -export([start/0]). start()-> fun_reverse([H|T]) -> fun_reverse(T)++[H]; fun_reverse([]) -> [].
Поскольку оператор ++ копирует свой левый операнд, результат копируется многократно, что приводит к квадратичной сложности.
Использование строк — обработка строк может быть медленной, если выполняется неправильно. В Erlang вам нужно немного подумать о том, как используются строки, и выбрать подходящее представление. Если вы используете регулярные выражения, используйте re-module в STDLIB вместо устаревшего модуля regexp .
BEAM — это стековая виртуальная машина с байт-кодом — BEAM — это виртуальная машина на основе регистров. Он имеет 1024 виртуальных регистра, которые используются для хранения временных значений и передачи аргументов при вызове функций. Переменные, которые должны пережить вызов функции, сохраняются в стек. BEAM — интерпретатор многопоточного кода. Каждая инструкция является словом, указывающим непосредственно на исполняемый C-код, что делает отправку команды очень быстрой.