Erlang 直不斷spawn新程序會有什麼現象

2021-09-19 18:19:53 字數 2552 閱讀 3901

最近和同事聊天的時候,我突然想到程序pid格式為,其中a1代表node值, a2, a3則代表指定node下的程序值,開始a3為0。當a2的值增加到一定數後, a3的值加1,那麼問題來了:

1. a2增加到多少,a3加1

2. 如果a3的值也增加到這個值後會有什麼情況出現呢?

原始碼:

-module(spawn_loop_infinite2).

-author("zhaoweiguo").

%% api

-export([loop/1]).

-export([do_nothing/0]).

-export([loop1/2]).

loop(n) ->

loop1(f, n).

loop1(_f, 0) ->

ok;loop1(f, n) ->

pid = spawn(spawn_loop_infinite, do_nothing, ),

file:write(f, io_lib:format("[~p]:(~p)~n", [n, pid])),

loop1(f, n-1).

do_nothing() ->

ok.

執行命令:

erl> spawn_loop_infinite2:loop(33000).
開啟檔案aaa.txt:

[303]:(<0.32766.0>)

[302]:(<0.32767.0>)

[301]:(<0.0.1>)

[300]:(<0.1.1>)

[299]:(<0.2.1>)

結論:

a2增加到32767,a3加1
原始碼:

% 每次生成100萬新程序,列印下一程序的pid,休息0.1秒後再生成100萬新程序

-module(spawn_loop_infinite).

-author("zhaoweiguo").

%% api

-export([loop/2]).

-export([do_nothing/0]).

loop(n, n) ->

io:format("stop~n");

loop(m, n) ->

add = 32768*10,

io:format("~p;", [n]),

loop1(add, n, f),

file:close(f),

timer:sleep(10),

loop(m, n+1).

loop1(0, _n, _f) ->

ok;loop1(add, n, f) ->

pid = spawn(spawn_loop_infinite, do_nothing, ),

file:write(f, io_lib:format("[~p]:(~p)~n", [add, pid])),

loop1(add-1, n, f).

do_nothing() ->

ok.

在檔案fff820.txt中看到::

[296800]:(<0.32762.8191>)

[296799]:(<0.32763.8191>)

[296798]:(<0.32764.8191>)

[296797]:(<0.32765.8191>)

[296796]:(<0.32766.8191>)

[296795]:(<0.32767.7>)

[296794]:(<0.5.0>)

[296793]:(<0.7.0>)

[296792]:(<0.11.0>)

[296791]:(<0.8.0>)

[296790]:(<0.17.0>)

[296789]:(<0.16.0>)

[296788]:(<0.24.0>)

[296787]:(<0.6.0>)

...[296755]:(<0.72.0>)

[296754]:(<0.73.0>)

[296753]:(<0.74.0>)

[296752]:(<0.75.0>)

[296751]:(<0.76.0>)

[296750]:(<0.77.0>)

[296749]:(<0.78.0>)

結論:

a3在增加到8191後就不再增加,改為使用已經**的程序

經過很短的混亂後又變的有序起來

之後每一次a3+1都會先亂,再有序,並且亂的順序都是對的

其他發現:

% 有個有趣的發現, 在每次程序到達<0.32766.8191>後產生的下乙個程序分別是:

<0.32767.7>

<0.32767.15>

<0.32767.23>

<0.32767.31>

<0.32767.39>

<0.32767.47>

erlang中的spawn函式

spawn fun pid 引數型別 fun function 引數為空的函式 返回型別 程序pid 說明 生成乙個由fun函式啟動的 引數為空的新程序,並返回程序的pid。spawn node,fun pid 引數型別 node node 節點 fun function 引數為空的函式 返回型別 ...

c const 不斷跟新

1.把乙個 const 物件的位址賦給乙個普通的 非 const 物件的指標也會導致 編譯時的錯誤 const double pi 3.14 double ptr error ptr is a plain pointer const double cptr ok cptr is a pointer ...

安裝RabbitMQ,一直提示Erlang版本過低

意思就是說erlang版本過低,請安裝更高的版本。出現上面問題的原因,是解除安裝erlang方式不對,沒有清理乾淨導致。rabbitmq和erlang版本對應關係,請見官網 按照網上說明,解除安裝rabbitmq和erlang 1 開啟windows控制面板,雙擊 程式和功能 2 在當前安裝的程式列...