2
outer_func(State) ->
spawn(fun()-> do_something(State) end).
State
共有すること、または生成されたプロセス・ヒープに深いが、コピーされたのだろうか?
outer_func(State) ->
spawn(fun()-> do_something(State) end).
State
共有すること、または生成されたプロセス・ヒープに深いが、コピーされたのだろうか?
ディープコピーされます。ここでは簡単なデモです:、ここでの状態は、複数のプロセスと共有する場合、コピー「深い」ことはありません大きなバイナリで出力はそれとは対照的に
1> State = lists:seq(1, 1000000).
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,
23,24,25,26,27,28,29|...]
2> DoSomething = fun(State) -> io:format("~p~n", [process_info(self(), memory)]) end.
3> spawn(fun() -> DoSomething(State) end), spawn(fun() -> DoSomething(State) end), spawn(fun() -> DoSomething(State) end).
{memory,16583520}
{memory,16583520}
{memory,16583520}
です:
1> State = binary:copy(<<"a">>, 50000000).
<<"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"...>>
2> DoSomething = fun(State) -> io:format("~p~n", [process_info(self(), memory)]) end.
3> spawn(fun() -> DoSomething(State) end), spawn(fun() -> DoSomething(State) end), spawn(fun() -> DoSomething(State) end).
{memory,8744}
{memory,8744}
{memory,8744}
ので、プロセス1から100万の整数のリストは約16MBのメモリを使用し、大きなバイナリを持つものは8KBを使用しました(バイナリは実際に無視できる部分です)。
プロセスは共有しません! – rvirding