Erlang中的并發(fā)粒度是一個過程。流程是與其他流程同時運行并獨立于其他流程的活動/任務。Erlang中的這些過程與大多數人所熟悉的過程和線程不同。Erlang進程是輕量級的,與其他進程(內存)隔離運行,并且由Erlang的虛擬機(VM)調度。進程的創(chuàng)建時間非常短,剛生成的進程的內存占用非常小,單個Erlang VM可以運行數百萬個進程。
借助spawn方法創(chuàng)建一個進程。該方法的一般語法如下。
spawn(Module, Name, Args)
Module ?這是預定義的原子值,必須為?MODULE。
Name ?這是定義流程時要調用的函數的名稱。
Args ?這些是需要發(fā)送給函數的參數。
返回創(chuàng)建的新流程的流程ID。
以下程序顯示了spawn方法的示例。
-module(helloworld). -export([start/0, call/2]). call(Arg1, Arg2) -> io:format("~p ~p~n", [Arg1, Arg2]). start() -> Pid = spawn(?MODULE, call, ["hello", "process"]), io:fwrite("~p",[Pid]).
關于上述程序,需要注意以下幾點。
定義了一個稱為call的函數,該函數將用于創(chuàng)建過程。
spawn方法使用參數hello和process調用call函數。
輸出結果
當我們運行上面的程序時,我們將得到以下結果。
<0.29.0>"hello" "process"
現在,讓我們看一下進程可用的其他功能。
序號 | 方法與說明 |
---|---|
1 | 此方法用于確定進程id是否存在。 |
2 | 這被稱為is_process_alive(Pid)。一個Pid必須引用本地節(jié)點上的一個進程。 |
3 | 它將進程 id 轉換為列表。 |
4 | 返回包含所有已注冊進程的名稱的列表。 |
5 | 最常用的 BIF 之一,返回調用進程的 pid。 |
6 | 用于在系統(tǒng)中注冊一個進程。 |
7 | 它被稱為 whereis (Name)。返回用該名稱注冊的進程的 pid。 |
8 | 用于注銷系統(tǒng)中的進程。 |