Erlang 進程

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

is_pid

此方法用于確定進程id是否存在。

2

is_process_alive

這被稱為is_process_alive(Pid)。一個Pid必須引用本地節(jié)點上的一個進程。

3

pid_to_list

它將進程 id 轉換為列表。

4

registered

返回包含所有已注冊進程的名稱的列表。

5

self

最常用的 BIF 之一,返回調用進程的 pid。

6

register

用于在系統(tǒng)中注冊一個進程。

7

whereis

它被稱為 whereis (Name)。返回用該名稱注冊的進程的 pid。

8

unregister

用于注銷系統(tǒng)中的進程。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清