erlangでfibonacci
fib.erlの中身
-module(fib). -export([main/1, fibstarter/1, fib/1]). main(N) -> spawn(?MODULE, fibstarter, [N]), spawn(?MODULE, fibstarter, [N]). fibstarter(N) -> Result = fib(N), erlang:display(["result", Result]). fib(1) -> 1; fib(2) -> 1; fib(N) -> fib(N - 1) + fib(N - 2).
$ erl Erlang (BEAM) emulator version 5.6 [source] [smp:2] [async-threads:0] [hipe] [kernel-poll:false] Eshell V5.6 (abort with ^G) 1> c(fib). {ok,fib} 2> fib:main(40). <0.39.0> 3> ["result",102334155] ["result",102334155]
実行中にアクティビティモニターで見るとちゃんとCPUが二つとも動いているのが確認出来ます。ちなみにerl -smp disableでやると一つしか動かないので処理が終わるまで結構時間がかかります。