是否可以“用完” Erlang进程ID?

Ric*_*art 5 erlang pid

这个问题的答案说,Erlang PID实际上是28位整数,其中前10个是节点号(本地节点始终为0),其后18个是全局过程表的索引。因此,如果我的理解是正确的,那么假设我们仅在单个节点上工作,则唯一pid的最大数量为2 ^ 18,即大约262,000。这是否是我可以随时间在单个Erlang节点上产生的最大进程数?如果我有一个运行时间很长的Erlang节点,分配我的第2 ^ 18 + 1个节点后,VM会立即崩溃吗?还是可以重用旧的未使用的pid?如果是这样,该过程如何在虚拟机级别实施?

joh*_*hlo 5

另一个问题的答案似乎是指旧版本的Erlang运行时,它在R9之后发生了变化(R17是目前最新的)。根据实施进程 ID 使用28 位作为内部标识符。

当进程死亡并且任何监视器都已收到通知时,PID 就会被回收,因此 2^28 是节点上同时进程数的上限。

默认进程限制为 2^18,可以使用 选项增加+Perl请参阅erl 选项文档

注意:文档说上限是 2^27 个进程,这与代码不一致。