在討論性能時(shí),需要注意有關(guān)Erlang的以下幾點(diǎn)。
Funs非???/strong> ?在R6B中為Funs賦予了自己的數(shù)據(jù)類型,并在R7B中對(duì)其進(jìn)行了進(jìn)一步優(yōu)化。
使用 ++ 運(yùn)算符?需要正確使用此運(yùn)算符。以下示例是執(zhí)行++操作的錯(cuò)誤方法。
-module(helloworld). -export([start/0]). start()-> fun_reverse([H|T]) -> fun_reverse(T)++[H]; fun_reverse([]) -> [].
當(dāng)++運(yùn)算符復(fù)制其左操作數(shù)時(shí),結(jié)果將被重復(fù)復(fù)制,從而導(dǎo)致二次復(fù)雜度。
使用字符串?如果處理不當(dāng),字符串處理可能會(huì)很慢。在Erlang中,您需要更多地考慮如何使用字符串,并選擇適當(dāng)?shù)谋硎尽H绻褂谜齽t表達(dá)式,請(qǐng)使用STDLIB中的re-module而不是過(guò)時(shí)的regexp模塊。
BEAM 是一個(gè)基于堆棧的字節(jié)碼虛擬機(jī)?BEAM 是一個(gè)基于寄存器的虛擬機(jī)。它有1024個(gè)虛擬寄存器,用于保存臨時(shí)值和調(diào)用函數(shù)時(shí)傳遞參數(shù)。需要在函數(shù)調(diào)用后存活的變量被保存到堆棧中。BEAM 是一個(gè)線程代碼解釋器。每條指令都是直接指向可執(zhí)行 c 代碼的單詞,使得指令分派非???。