Erlang - 进程


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

进程是在spawn方法的帮助下创建的。该方法的一般语法如下所示。

句法

spawn(Module, Name, Args)

参数

  • 模块- 这是一个预定义的Atomics值,必须是 ?MODULE。

  • 名称- 这是定义流程时要调用的函数的名称。

  • 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

is_pid

该方法用于判断进程id是否存在。

2

进程是否还活着

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

3

pid_to_list

它将进程 ID 转换为列表。

4

挂号的

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

5

自己

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

6

登记

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

7

哪里

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

8

注销

这用于取消注册系统中的进程。