« 日本語係受け解析器 CaboCha | メイン | [メモ] Eralng Course: Module 3 - Concurrent Programming 中編 »

2007年6月19日

[メモ] Eralng Course: Module 3 - Concurrent Programming 前編

もくじ

定義(Definitions)
  * プロセス Process - 並列動作。完全な仮想マシン。
                システムはたくさんの並列プロセスを
                同時に実行することがある。
  * メッセージ Message - プロセス間通信手段
  * タイムアウト Timeout - あたえられた時間の間、待機するしくみ。
  * 登録プロセス Registered Process - 名前で登録されたプロセス
  * クラ/サバ モデル Client/Server Model - 並列実行の基本モデル

プロセスの生成(Creating a New Process)
  以下の命令でプロセスが生成される。Pid2はプロセスの
  識別子(Pid = Process id)を保持する変数。
    Pid2 = spawn(Mod, Func, Args)

簡単なメッセージ送信(Simple Message Passing)
  プロセスA(送信側)
    B!{self(), foo}.
  プロセスB(受信側)
    recieve
      {From, Msg} -> Actions ...
    end
  組込関数self()は自分自身のPidを取得する。
  この場合、受信側で
    From = プロセスAのPid
    Msg = foo
  が入る
  
  プロセスA(送信側)
    B!{self(), {digits, [1, 2, 6] }.
  プロセスB(受信側)
    recieve
      {A, { digits, D } } -> analyse(D);
    end

  この場合、受信側で
    A = プロセスAのPid
    D = [1, 2, 6]
   が入るので、analyse([1, 2, 6])が実行される。

   すでに A が代入済みの場合は、データのみ
   受け入れ(accept)られる。

   ※こういうことか?
    recieve
      { _, { digits, D } } -> analyse(D).
    end

エコープロセスの例(An Echo process)
  -module(echo).
  -export([go/0, loop/0]).

  go() ->
      Pid2 = spawn(echo, loop, []),
      Pid2 ! {self(), hello},
      receive
          {Pid2, Msg} ->
              io:format("P1 ~w~n",[Msg])
      end,
      Pid2 ! stop.

  loop() ->
      receive
          {From, Msg} ->
              From ! {self(), Msg},
              loop();
          stop ->
              true
      end.

  go()で送信側。Pid2(受信側)プロセスを生成し、
  文字列メッセージを送る。Pid2からの文字列メッセージを待ち、
  受信したら Pid2に終了メッセージを送る。

  loop()は受信側。
  文字列メッセージと終了メッセージがある。
  文字列メッセージは、送信元に同じ文字列メッセージを返す。
  終了メッセージも受け取る(実行が停止する)。

  実行方法
   echo.erl に保存して、
   > c(echo).
   > echo:go().
   P1 hello
   stop
   >

- - -

もくじ

Eralng Course: Module 3 - Concurrent Programming
http://www.erlang.org/course/concurrent_programming.html

投稿者 kawaguti : 2007年6月19日 05:16

トラックバック(0)

このブログ記事を参照しているブログ一覧: [メモ] Eralng Course: Module 3 - Concurrent Programming 前編

このブログ記事に対するトラックバックURL: http://do-gugan.com/cgi-bin/mt/mt-tb.cgi/2009

コメントする