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

もくじ

登録されたプロセス (Registered Processes)
  register(Alias, Pid) プロセスID: Pid のプロセスを別名(Alias)に登録

    start() ->
      Pid = spawn(num_anal, server, [])
      register(analyser, Pid).
    
    analyse(Seq) ->
      analyser ! {self(),{analyse,Seq}},
      receive
        {analysis_result,R} ->
          R
      end.

  「登録されたプロセス」へは、どのプロセスからでも
  メッセージを送ることができる。

クライアントサーバモデル (Client Server Model)
  メッセージ定義
     要求: {request, Req}
     応答: {reply, Rep}

  サーバのコード
    -module(myserver).

    server(Data) ->
      receive
        {From,{request,X}} ->
          {R, Data1} = fn(X, Data),
          From ! {myserver,{reply, R}},
            server(Data1)
      end.

  インタフェースライブラリ ( Interface Library ) = クライアント側
    -export([request/1]).

    request(Req) ->
      myserver ! {self(),{request,Req}},
        receive
          {myserver,{reply,Rep}} ->
            Rep
    end.

  ※クライアント-サーバモデルはメッセージ通信で
    簡単にかけるよ、と。「それメッセージで出来るよ。」

タイムアウト (Timeouts)
  [ time ] --("tick")--> [ B ] <--(foo)-- [A]
    receive
      foo -> Actions1;
    after
      Time -> Action2
    end
  もしメッセージ foo を 時間Timeまでに A から
  受け取っていたら Actions1を行い、そうでな
  ければActions2を行う。

タイムアウトの使いかた (Uses of Timeouts)

  sleep(T) - Tミリ秒の間、プロセスを止める
    sleep(T) ->
      receive
      after
        T ->
          true
      end.

  suspend() - プロセスを無期停止
    suspend() ->
      receive
      after
        infinity ->
          true
      end.

  alarm(T, What) - メッセージWhatはTミリ秒後にプロセスに届く
    set_alarm(T, What) ->
      spawn(timer, set, [self(),T,What]).

    set(Pid, T, Alarm) ->
      receive
      after
        T ->
          Pid ! Alarm
      end.
      receive
        Msg ->
          ... ;
      end

  flush() - メッセージバッファの吐き出し(flush)
    flush() ->
      receive
        Any ->
          flush()
      after
        0 ->
          true
      end.

   タイムアウト(after)のあとにある値0は、メッセージ
   バッファをまずチェックして、何もなければ、
   続くコードを実行する、ということを意味する。

- - -

 もくじ

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

トラックバック(0)

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

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

コメントする

2008年8月

          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 30
31            

アーカイブ