More Related Content
More from sleepy_yoshi (20)
ゆとり向けErlang入門 (1): メッセージパッシングことはじめ
- 2. なんぞこれ?
• ゆとり向けErlang入門
– 今回はメッセージパッシングの解説
• 対象読者
– 基本的なErlang が 可能であること
– ゆとりという自覚があること
– 5分間の学習時間に耐える覚悟があること
STOP!
上記に当てはまらない方は
ここで読むのをおやめください
1
- 11. メッセージパッシングの れ
(2) ポスト
(1) 手紙を に入る
発送
hello
Pid1 Pid2
receive
Pid2 ! hello. (3) 開封する Msg -> Msg
end.
10
- 12. Erlangシェルで確認 (1/2)
• シェルのプロセスIDを知る: self()
• プロセスIDの指定方法: pid(x,x,x)
– 自分に送信するのでself()でも い
• メッセージを送信: <pid> ! <message>
> self(). pid(0,31,0) ! hello
<0.31.0> の値であり,
> pid(0,31,0) ! hoge. 受信メッセージ
ではないことに注意
hoge
> pid(0,31,0) ! fuga.
fuga
> pid(0,31,0) ! piyo.
piyo 11
- 13. Erlangシェルで確認 (2/2)
• メッセージの確認
– (1) receiveを使う
– (2) flush()でダンプ
> receive Msg -> Msg end.
hoge
> flush().
Shell got fuga
Shell got piyo
ok
>
12
- 15. イメージ図2: 手紙の開封
last
(2) flush()でダンプ
piyo
piyo
シェルプロセス
fuga
fuga
(1) receive文で一通開封
> receive
hoge
hoge Msg -> Msg
end.
first
hoge
14
- 20. プロセスID
を返す
spawn(モジュール名, 関数名, [引数,...])
19
- 23. プロセスの作り方
• spawn(モジュール名, 関数名, [引数,...])
ソースコード Erlangシェル
-module(yutori). 1> Pid = spawn(yutori,
-compile(export_all). loop,[]).
<0,38,0>
loop () -> 2> Pid ! hello.
receive olleh
Msg -> olleh, 3>
loop()
end.
22
- 26. 解説: シェルプロセス
• spawnによってプロセス生成
– PidにプロセスID保持
• 生成したプロセスにメッセージ送信
• プロセスからの返り値を受け取る
1> Pid = spawn(yutori,loop,[]).
<0,38,0>
2> Pid ! hello.
olleh
3>
25
- 38. 返事を書くためには?
返信先 (Pid1) の
• 返信先を知る必要がある ことを知ってい
る必要がある
Pid1 Pid2
(方法1) あらかじめPid1のことを知っておく
(方法2) 手紙に返信先を書いてもらう
37
- 42. 学んだこと
• メッセージの送信方法: !
• メッセージの開封方法: receive
– パターンマッチによる開封順序の違い
• プロセスの作り方: spawn
– 末尾再帰によるメッセージ待機
– メッセージの返信方法
• Erlangシェルの使い方
– pid(), flush(), i()
41