Erlang中的并发粒度是一个过程。流程是与其他流程同时运行并独立于其他流程的活动/任务。Erlang中的这些过程与大多数人所熟悉的过程和线程不同。Erlang进程是轻量级的,与其他进程(内存)隔离运行,并且由Erlang的虚拟机(VM)调度。进程的创建时间非常短,刚生成的进程的内存占用非常小,单个Erlang VM可以运行数百万个进程。
借助spawn方法创建一个进程。该方法的一般语法如下。
spawn(Module, Name, Args)
Module ?这是预定义的原子值,必须为?MODULE。
Name ?这是定义流程时要调用的函数的名称。
Args ?这些是需要发送给函数的参数。
返回创建的新流程的流程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 | 此方法用于确定进程id是否存在。 |
2 | 这被称为is_process_alive(Pid)。一个Pid必须引用本地节点上的一个进程。 |
3 | 它将进程 id 转换为列表。 |
4 | 返回包含所有已注册进程的名称的列表。 |
5 | 最常用的 BIF 之一,返回调用进程的 pid。 |
6 | 用于在系统中注册一个进程。 |
7 | 它被称为 whereis (Name)。返回用该名称注册的进程的 pid。 |
8 | 用于注销系统中的进程。 |