code

2017年1月19日 星期四

Erlang筆記1 - Introduction

Model Concurrency

Erlang是特別用來設計model同時發生的事件,透過設計一個Erlang processes set,來解決concurrency problem。

相當於在OOP中設計class hierarchy。

Erlang VM會自動利用parallel computer (multicore or networked computers or cloud)的parallelism的硬體能力,來執行Erlang concurrent programs。

硬體的parallelism不能被保證,因為可能被cloud 自動控制,或是被OS控制資源的multi-core CPU,所以同樣的concurrent program是否真的被平行處理也不能被保證。

不過Erlang JVM保證了concurrency 的behavior在任何一個Erlang JVM上一模一樣,不管底層的硬體和OS。


建立Concurrent Erlang processes

在erlang中,要創造一個concurrent lightweight process (不是OS的process)就要利用以下的erlang primitive function:



spawn會回傳一個PID,可以跟其他light weight process溝通。

注意erlang processes就是像是Java的object,而module就像是一個Java class。



Process間的溝通

靠的是傳message,語法有點爆笑:


用驚嘆號表示傳送訊息給某個承接PID的“變數(暫且叫之,不知道erlang的術語是什麼)”叫做Susannah的,訊息內容第一個參數是把self reference傳出去,後面的字串則是訊息。

有點可愛。

當然接收訊息也可以寫個listener or callback:


From和Message這兩個“變數”就自動綁定傳進來的message對應參數。



沒有留言:

張貼留言