每個學Erlang的人都應該知道的efficiency_guide

之前剛開始學習的Erlang的時候稍微看過這個教程,但是沒有看全,發現這個教程還涵蓋了挺多的信息的,今天把這個教程看完,順便做一下總結,教程原版地址 本來是想把所有的總結寫在一篇文章裡面的,但是由於篇幅比較大,所以就把所有的總結分為以下幾篇文章: efficiency_guide:七個Erlang性能的誤區 efficiency_guide:需要注意的模塊和BIF efficiency-guide:Binary的構建和匹配 efficiency-guide:List處理 efficiency-guide:函數 efficiency-guide:表和資料庫 efficiency-guide:進程 最後再提兩個誤區: 匿名函數很慢 ...
Read more

Erlang中catch和try...catch的區別

在Erlang的錯誤處理中,catch並不是try…catch的縮寫,try…catch和catch是不同的。下面我將通過一個例子來區別出他們的不同,為以後的使用做一個參考。%% exception_test.erl 代碼文件 -module(exception_test). -compile(export_all). generate_exception(1) -> a; generate_exception(2) -> throw(a); generate_exception(3) -> error(a); generate_exception(4) -> exit(a); generate_exception(5) -> {EXIT, a}. test_use_catch() -> [{I, catch generate_exception(I)} ...
Read more

為什麼使用Erlang?

如果問我覺得Erlang最重要的特性是什麼的話,我覺得應該是並發。並發能夠帶來的好處是不言而喻的,比如: 性能 現在的計算機由於主頻的限制,都在往多核的方式發展,有些比較高端的機器甚至有幾十個核心。如果編寫的程序都是順序運行的話將會嚴重浪費多核計算機的計算能力。Erlang本身是面向並發編程的,如果把之前在單核機器上面跑的Erlang程序放到多核機器上面跑的話,性能將會極大的提高。 擴展性 如果在一台機器上面運行Erlang程序還不能滿足性能的要求的話,可以簡單的升級機器的CPU核心個數,甚至可以經過簡單的改造把不同的進程分配到不同的機器上面運行,通過水平擴展方式來滿足高並發的業務需求。 容錯性 Erlang內部實現的進程是相互獨立的,一個進程的崩潰並不會影響到另外一個進程的運行,同時Erlang內部還OTP框架來保證系統的容錯性。 清晰性 ...
Read more

Erlang垃圾回收

如圖1所示,Erlang的進程和Linux的進程非常的像,由進程式控制制塊(PCB)、堆(Stack)和棧(Heap)組成。 進程式控制制塊:進程式控制制模塊會保存一些關於進程的信息比如它在進程表中的標識符(PID)、當前狀態(運行、等待)、它的註冊名、初始和當前調用,同時PCB也會保存一些指向傳入消息的指針,這些傳入消息是存儲在堆中連接表中的。 棧:它是一個向下增長的存儲區,這個存儲區保存輸入和輸出參數、返回地址、本地變數和用於執行表達式的臨時空間。 * 堆:它是一個向上增長的存儲區,這個存儲區保存進程郵箱的物理消息,像列表、元組和Binaries這種的複合項以及比像浮點數這種一個機器字更大的對象。超過64機器字的二進位項不會存儲在進程私有堆里,而是被存在圖1的Shared Area for Binaries裡面,進程堆維護一個列表(remembered ...
Read more
1