2016-09-15 2 views

答えて

4

ディープコピーされます。ここでは簡単なデモです:、ここでの状態は、複数のプロセスと共有する場合、コピー「深い」ことはありません大きなバイナリで出力はそれとは対照的に

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を使用しました(バイナリは実際に無視できる部分です)。

関連する問題