English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Производительность Erlang

Обсуждая производительность, нужно учитывать следующие моменты по Erlang.

  • Funs очень быстр −В R6B Funs был赋予了自己的 тип данных, и в R7B был оптимизирован.

  • Использование оператора ++−Нужно правильно использовать этот оператор. Вот пример неправильного выполнения операции ++.

Онлайн пример

-module(helloworld). 
-export([start/0]). 
start() ->
   fun_reverse([H|T]) ->
   fun_reverse(T) ++ [H]; 
   fun_reverse([]) ->
   [].

Когда оператор ++ копирует свой левый операнд, результат будет повторно копироваться,从而导致 двойную сложность.

  • Использование строк−Если не обращаться с ними правильно, обработка строк может быть медленной. В Erlang вам нужно больше думать о том, как использовать строки, и выбирать подходящее представление. Если вы используете регулярные выражения, используйте модуль re из STDLIB вместо устаревшего модуля regexp.

  • BEAM — это виртуальная машина bytecode на основе стека−BEAM — это регистровая виртуальная машина. У нее есть 1024 виртуальных регистра, которые используются для хранения временных значений и передачи параметров при вызове функции. Переменные, которые должны оставаться в живых после вызова функции, сохраняются в стеке. BEAM — это интерпретатор кода на струнах. Каждая команда напрямую указывает на слово executable c-код, что делает инструкцию очень быстрой.