Erlang - 进程
Erlang 中并发的粒度是一个进程。 进程是与其他进程同时运行且独立于其他进程的活动/任务。 Erlang 中的这些进程与大多数人熟悉的进程和线程不同。 Erlang 进程是轻量级的,在与其他进程(内存)隔离的情况下运行,并由 Erlang 的虚拟机(VM)调度。 进程的创建时间非常短,刚刚生成的进程的内存占用非常小,单个 Erlang VM 可以运行数百万个进程。
进程是在spawn方法的帮助下创建的。 该方法的一般语法如下所示。
语法
spawn(Module, Name, Args)
参数
Module − 这是一个预定义的原子值,必须是 ?MODULE。
Name − 这是定义流程时要调用的函数的名称。
Args − 这些是需要发送给函数的参数。
返回值
返回创建的新进程的进程ID。
例如
以下程序显示了生成方法的示例。
-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 的函数,该函数将用于创建流程。
spawn 方法使用参数 hello 和 process 调用 call 函数。
输出
当我们运行上面的程序时,将得到以下结果。
<0.29.0>"hello" "process"
现在让我们看看进程可用的其他函数。
序号 | 方法和说明 |
---|---|
1 |
该方法用于判断进程id是否存在。 |
2 |
这称为 is_process_alive(Pid)。 Pid 必须引用本地节点的进程。 |
3 |
它将进程 ID 转换为列表。 |
4 |
返回包含所有已注册进程名称的列表。 |
5 |
最常用的 BIF 之一,返回调用进程的 pid。 |
6 |
这用于在系统中注册进程。 |
7 |
它被称为whereis(Name)。 返回使用该名称注册的进程的 pid。 |
8 |
这用于取消注册系统中的进程。 |