Erlang - 进程



Erlang 中并发的粒度是一个进程。进程是一个活动/任务,它与其他进程并发运行并且相互独立。Erlang 中的进程与大多数人熟悉的进程和线程不同。Erlang 进程是轻量级的,在(内存)中与其他进程隔离运行,并由 Erlang 的虚拟机 (VM) 调度。进程的创建时间非常短,刚刚生成的进程的内存占用非常小,单个 Erlang VM 可以运行数百万个进程。

进程是借助 `spawn` 方法创建的。该方法的通用语法如下所示。

语法

spawn(Module, Name, Args)

参数

  • 模块 − 这是一个预定义的原子值,必须为 `?MODULE`。

  • 名称 − 这是在定义进程时要调用的函数的名称。

  • 参数 − 这些是要发送到函数的参数。

返回值

返回新创建进程的进程 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` 的函数,并将用于创建进程。

  • `spawn` 方法使用参数 `hello` 和 `process` 调用 `call` 函数。

输出

运行上述程序后,我们将得到以下结果。

<0.29.0>"hello" "process"

现在让我们来看看进程的其他可用函数。

序号 方法和描述
1

is_pid

此方法用于确定进程 ID 是否存在。

2

is_process_alive

这称为 `is_process_alive(Pid)`。Pid 必须引用本地节点上的进程。

3

pid_to_list

它将进程 ID 转换为列表。

4

registered

返回所有已注册进程名称的列表。

5

self

最常用的 BIF 之一,返回调用进程的 pid。

6

register

这用于在系统中注册进程。

7

whereis

这称为 `whereis(Name)`。返回使用该名称注册的进程的 pid。

8

unregister

这用于在系统中注销进程。

广告