2012年3月3日土曜日

Erlang プロセス 生成 サンプル

Rubyの勉強をしている。

そのとき、スレッドを並行実行するサンプルを丸写しした。

そのサンプルをErlang版として記述した。

以下にそれをコピペしておく。

◆並行実行動作

1.2つのプロセスが生成される。
2.それぞれのプロセスはある時間(秒)スリープして、時間経過後、ある文字を標準出力する。
3.7秒後メインプロセスが終了する(生成したプロセスも終了する)。

◆ソース

-module(test_thread_start).
-compile(export_all).

%% 標準出力
log_print( Start_time, String ) ->
    { _, Now, _ } = erlang:now(),
    Time = Now - Start_time,
    io:format( "~ps: ~s~n", [ Time, String ] ).

%% プロセス生成
loop_thread( Start_time, Sec, Str ) ->
    spawn( test_thread_start, thread, [ Start_time, Sec, Str ] ).

%% 生成したプロセスの動作
thread( Start_time, Wait_time, String ) ->
    timer:sleep( Wait_time ),
    log_print( Start_time, String ),
    thread( Start_time, Wait_time, String ).

start() ->
    { _, Start_time, _ } = erlang:now(),
    log_print( Start_time, "Start" ),

    loop_thread( Start_time, 2000, "a" ),
    loop_thread( Start_time, 3000, "b" ),

    timer:sleep( 7000 ),
    log_print( Start_time, "End" ).

◆実行結果