Submit Search
Upload
ゆとり向けErlang入門 (1): メッセージパッシングことはじめ
•
8 likes
•
3,999 views
S
sleepy_yoshi
Follow
ゆとり向けErlang入門.メッセージパッシングに関する資料.
Read less
Read more
Technology
News & Politics
Report
Share
Report
Share
1 of 44
Download now
Download to read offline
Recommended
論理と計算のしくみ 5.3 型付きλ計算 (前半)
論理と計算のしくみ 5.3 型付きλ計算 (前半)
Lintaro Ina
Essential Scala 第4章 トレイトによるデータモデリング
Essential Scala 第4章 トレイトによるデータモデリング
Takuya Tsuchida
抽象的な教えを試行錯誤しながら解釈した DDD の実践レポート
抽象的な教えを試行錯誤しながら解釈した DDD の実践レポート
hogesuzuki
Python 学習教材 (~299ページ)
Python 学習教材 (~299ページ)
Jun MITANI
圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド
Yoshihiro Mizoguchi
ゼロから作るDeepLearning 2~3章 輪読
ゼロから作るDeepLearning 2~3章 輪読
KCS Keio Computer Society
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
Takuya Akiba
Union find(素集合データ構造)
Union find(素集合データ構造)
AtCoder Inc.
Recommended
論理と計算のしくみ 5.3 型付きλ計算 (前半)
論理と計算のしくみ 5.3 型付きλ計算 (前半)
Lintaro Ina
Essential Scala 第4章 トレイトによるデータモデリング
Essential Scala 第4章 トレイトによるデータモデリング
Takuya Tsuchida
抽象的な教えを試行錯誤しながら解釈した DDD の実践レポート
抽象的な教えを試行錯誤しながら解釈した DDD の実践レポート
hogesuzuki
Python 学習教材 (~299ページ)
Python 学習教材 (~299ページ)
Jun MITANI
圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド
Yoshihiro Mizoguchi
ゼロから作るDeepLearning 2~3章 輪読
ゼロから作るDeepLearning 2~3章 輪読
KCS Keio Computer Society
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
Takuya Akiba
Union find(素集合データ構造)
Union find(素集合データ構造)
AtCoder Inc.
π計算
π計算
Yuuki Takano
なぜベイズ統計はリスク分析に向いているのか? その哲学上および実用上の理由
なぜベイズ統計はリスク分析に向いているのか? その哲学上および実用上の理由
takehikoihayashi
因果探索: 基本から最近の発展までを概説
因果探索: 基本から最近の発展までを概説
Shiga University, RIKEN
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
京大 マイコンクラブ
対話テキストの自動要約
対話テキストの自動要約
Masahiro Yamamoto
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
shigeki_ohtsu
アルゴリズムのイメージを擬人化する
アルゴリズムのイメージを擬人化する
AtCoder Inc.
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
Genya Murakami
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
Kimikazu Kato
明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
競技プログラミング頻出アルゴリズム攻略
競技プログラミング頻出アルゴリズム攻略
K Moneto
論文の書き方・読み方
論文の書き方・読み方
Satoshi Miura
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
StanとRで折れ線回帰──空間的視点取得課題の反応時間データを説明する階層ベイズモデルを例に──【※Docswellにも同じものを上げています】
StanとRで折れ線回帰──空間的視点取得課題の反応時間データを説明する階層ベイズモデルを例に──【※Docswellにも同じものを上げています】
Hiroyuki Muto
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
今から始める Lens/Prism
今から始める Lens/Prism
Naoki Aoyama
関数型プログラミング入門 for Matlab ユーザー
関数型プログラミング入門 for Matlab ユーザー
Ichiro Maruta
落合流先生流の論文要旨フォーマット
落合流先生流の論文要旨フォーマット
森 哲也
実用Brainf*ckプログラミング入門編
実用Brainf*ckプログラミング入門編
京大 マイコンクラブ
数理最適化とPython
数理最適化とPython
Yosuke Onoue
KDD2014勉強会: Large-Scale High-Precision Topic Modeling on Twitter
KDD2014勉強会: Large-Scale High-Precision Topic Modeling on Twitter
sleepy_yoshi
KDD2013読み会: Direct Optimization of Ranking Measures
KDD2013読み会: Direct Optimization of Ranking Measures
sleepy_yoshi
More Related Content
What's hot
π計算
π計算
Yuuki Takano
なぜベイズ統計はリスク分析に向いているのか? その哲学上および実用上の理由
なぜベイズ統計はリスク分析に向いているのか? その哲学上および実用上の理由
takehikoihayashi
因果探索: 基本から最近の発展までを概説
因果探索: 基本から最近の発展までを概説
Shiga University, RIKEN
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
京大 マイコンクラブ
対話テキストの自動要約
対話テキストの自動要約
Masahiro Yamamoto
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
shigeki_ohtsu
アルゴリズムのイメージを擬人化する
アルゴリズムのイメージを擬人化する
AtCoder Inc.
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
Genya Murakami
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
Kimikazu Kato
明日使えないすごいビット演算
明日使えないすごいビット演算
京大 マイコンクラブ
競技プログラミング頻出アルゴリズム攻略
競技プログラミング頻出アルゴリズム攻略
K Moneto
論文の書き方・読み方
論文の書き方・読み方
Satoshi Miura
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
StanとRで折れ線回帰──空間的視点取得課題の反応時間データを説明する階層ベイズモデルを例に──【※Docswellにも同じものを上げています】
StanとRで折れ線回帰──空間的視点取得課題の反応時間データを説明する階層ベイズモデルを例に──【※Docswellにも同じものを上げています】
Hiroyuki Muto
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
今から始める Lens/Prism
今から始める Lens/Prism
Naoki Aoyama
関数型プログラミング入門 for Matlab ユーザー
関数型プログラミング入門 for Matlab ユーザー
Ichiro Maruta
落合流先生流の論文要旨フォーマット
落合流先生流の論文要旨フォーマット
森 哲也
実用Brainf*ckプログラミング入門編
実用Brainf*ckプログラミング入門編
京大 マイコンクラブ
数理最適化とPython
数理最適化とPython
Yosuke Onoue
What's hot
(20)
π計算
π計算
なぜベイズ統計はリスク分析に向いているのか? その哲学上および実用上の理由
なぜベイズ統計はリスク分析に向いているのか? その哲学上および実用上の理由
因果探索: 基本から最近の発展までを概説
因果探索: 基本から最近の発展までを概説
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
対話テキストの自動要約
対話テキストの自動要約
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
アルゴリズムのイメージを擬人化する
アルゴリズムのイメージを擬人化する
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
明日使えないすごいビット演算
明日使えないすごいビット演算
競技プログラミング頻出アルゴリズム攻略
競技プログラミング頻出アルゴリズム攻略
論文の書き方・読み方
論文の書き方・読み方
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
StanとRで折れ線回帰──空間的視点取得課題の反応時間データを説明する階層ベイズモデルを例に──【※Docswellにも同じものを上げています】
StanとRで折れ線回帰──空間的視点取得課題の反応時間データを説明する階層ベイズモデルを例に──【※Docswellにも同じものを上げています】
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
今から始める Lens/Prism
今から始める Lens/Prism
関数型プログラミング入門 for Matlab ユーザー
関数型プログラミング入門 for Matlab ユーザー
落合流先生流の論文要旨フォーマット
落合流先生流の論文要旨フォーマット
実用Brainf*ckプログラミング入門編
実用Brainf*ckプログラミング入門編
数理最適化とPython
数理最適化とPython
More from sleepy_yoshi
KDD2014勉強会: Large-Scale High-Precision Topic Modeling on Twitter
KDD2014勉強会: Large-Scale High-Precision Topic Modeling on Twitter
sleepy_yoshi
KDD2013読み会: Direct Optimization of Ranking Measures
KDD2013読み会: Direct Optimization of Ranking Measures
sleepy_yoshi
PRML復々習レーン#15 前回までのあらすじ
PRML復々習レーン#15 前回までのあらすじ
sleepy_yoshi
PRML復々習レーン#14 前回までのあらすじ
PRML復々習レーン#14 前回までのあらすじ
sleepy_yoshi
PRML復々習レーン#13 前回までのあらすじ
PRML復々習レーン#13 前回までのあらすじ
sleepy_yoshi
PRML復々習レーン#12 前回までのあらすじ
PRML復々習レーン#12 前回までのあらすじ
sleepy_yoshi
ICML2013読み会: Distributed training of Large-scale Logistic models
ICML2013読み会: Distributed training of Large-scale Logistic models
sleepy_yoshi
SEXI2013読み会: Adult Query Classification for Web Search and Recommendation
SEXI2013読み会: Adult Query Classification for Web Search and Recommendation
sleepy_yoshi
計算論的学習理論入門 -PAC学習とかVC次元とか-
計算論的学習理論入門 -PAC学習とかVC次元とか-
sleepy_yoshi
PRML復々習レーン#11 前回までのあらすじ
PRML復々習レーン#11 前回までのあらすじ
sleepy_yoshi
SMO徹底入門 - SVMをちゃんと実装する
SMO徹底入門 - SVMをちゃんと実装する
sleepy_yoshi
PRML復々習レーン#10 前回までのあらすじ
PRML復々習レーン#10 前回までのあらすじ
sleepy_yoshi
PRML復々習レーン#10 7.1.3-7.1.5
PRML復々習レーン#10 7.1.3-7.1.5
sleepy_yoshi
PRML復々習レーン#9 6.3-6.3.1
PRML復々習レーン#9 6.3-6.3.1
sleepy_yoshi
PRML復々習レーン#9 前回までのあらすじ
PRML復々習レーン#9 前回までのあらすじ
sleepy_yoshi
PRML復々習レーン#7 前回までのあらすじ
PRML復々習レーン#7 前回までのあらすじ
sleepy_yoshi
SIGIR2012勉強会 23 Learning to Rank
SIGIR2012勉強会 23 Learning to Rank
sleepy_yoshi
DSIRNLP#3 LT: 辞書挟み込み型転置インデクスFIg4.5
DSIRNLP#3 LT: 辞書挟み込み型転置インデクスFIg4.5
sleepy_yoshi
ICML2012読み会 Scaling Up Coordinate Descent Algorithms for Large L1 regularizat...
ICML2012読み会 Scaling Up Coordinate Descent Algorithms for Large L1 regularizat...
sleepy_yoshi
PRML復々習レーン#3 3.1.3-3.1.5
PRML復々習レーン#3 3.1.3-3.1.5
sleepy_yoshi
More from sleepy_yoshi
(20)
KDD2014勉強会: Large-Scale High-Precision Topic Modeling on Twitter
KDD2014勉強会: Large-Scale High-Precision Topic Modeling on Twitter
KDD2013読み会: Direct Optimization of Ranking Measures
KDD2013読み会: Direct Optimization of Ranking Measures
PRML復々習レーン#15 前回までのあらすじ
PRML復々習レーン#15 前回までのあらすじ
PRML復々習レーン#14 前回までのあらすじ
PRML復々習レーン#14 前回までのあらすじ
PRML復々習レーン#13 前回までのあらすじ
PRML復々習レーン#13 前回までのあらすじ
PRML復々習レーン#12 前回までのあらすじ
PRML復々習レーン#12 前回までのあらすじ
ICML2013読み会: Distributed training of Large-scale Logistic models
ICML2013読み会: Distributed training of Large-scale Logistic models
SEXI2013読み会: Adult Query Classification for Web Search and Recommendation
SEXI2013読み会: Adult Query Classification for Web Search and Recommendation
計算論的学習理論入門 -PAC学習とかVC次元とか-
計算論的学習理論入門 -PAC学習とかVC次元とか-
PRML復々習レーン#11 前回までのあらすじ
PRML復々習レーン#11 前回までのあらすじ
SMO徹底入門 - SVMをちゃんと実装する
SMO徹底入門 - SVMをちゃんと実装する
PRML復々習レーン#10 前回までのあらすじ
PRML復々習レーン#10 前回までのあらすじ
PRML復々習レーン#10 7.1.3-7.1.5
PRML復々習レーン#10 7.1.3-7.1.5
PRML復々習レーン#9 6.3-6.3.1
PRML復々習レーン#9 6.3-6.3.1
PRML復々習レーン#9 前回までのあらすじ
PRML復々習レーン#9 前回までのあらすじ
PRML復々習レーン#7 前回までのあらすじ
PRML復々習レーン#7 前回までのあらすじ
SIGIR2012勉強会 23 Learning to Rank
SIGIR2012勉強会 23 Learning to Rank
DSIRNLP#3 LT: 辞書挟み込み型転置インデクスFIg4.5
DSIRNLP#3 LT: 辞書挟み込み型転置インデクスFIg4.5
ICML2012読み会 Scaling Up Coordinate Descent Algorithms for Large L1 regularizat...
ICML2012読み会 Scaling Up Coordinate Descent Algorithms for Large L1 regularizat...
PRML復々習レーン#3 3.1.3-3.1.5
PRML復々習レーン#3 3.1.3-3.1.5
ゆとり向けErlang入門 (1): メッセージパッシングことはじめ
1.
ゆとり向けErlang入門 (1): メッセージパッシングことはじめ
2010-03-02 id:sleepy_yoshi (SUHARA YOSHIHIKO)
2.
なんぞこれ? • ゆとり向けErlang入門 –
今回はメッセージパッシングの解説 • 対象読者 – 基本的なErlang が 可能であること – ゆとりという自覚があること – 5分間の学習時間に耐える覚悟があること STOP! 上記に当てはまらない方は ここで読むのをおやめください 1
3.
10秒で学ぶ メッセージパッシング
2
4.
Erlangではたくさんの プロセスが
に く 3
5.
各プロセスは 自分のポストを持つ
4
6.
プロセス間の通信は メッセージで われる プロセス間のメッセージ = 手紙
5
7.
すなわち
6
8.
プロセス間の通信は 手紙の送受信で われる
ある ある プロセス プロセス 7
9.
10秒で学ぶ メッセージパッシング
(終) 8
10.
(一言でいうと) メッセージパッシング
は だ! 9
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
14.
イメージ図1: 手紙の送信 • 自分自身
(シェルプロセス) へ手紙を3通送信 シェル piyo piyo プロセス fuga fuga hoge hoge 13
15.
イメージ図2: 手紙の開封
last (2) flush()でダンプ piyo piyo シェルプロセス fuga fuga (1) receive文で一通開封 > receive hoge hoge Msg -> Msg end. first hoge 14
16.
自分 (シェル) 以外にも メッセージを送りたい!
15
17.
でもプロセスの作り方が わからない...
16
18.
そこで!
17
19.
5秒で学ぶ プロセスの作り方
18
20.
プロセスID
を返す spawn(モジュール名, 関数名, [引数,...]) 19
21.
spawn
20
22.
5秒で学ぶ プロセスの作り方
(終) 21
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
24.
プロセスの確認方法 • i() で生成したプロセスを確認できる
(先ほどの続き) 3> i(). ... <0.38.0> yutori:loop/0 233 3 0 yutori:loop/0 0 ... 23
25.
解説: loop() • 末尾再帰によってreceive文を
も -module(yutori). -compile(export_all). メッセージの開封後 loop () -> 再びloop()開始 receive Msg -> olleh, loop() end. 24
26.
解説: シェルプロセス • spawnによってプロセス生成
– PidにプロセスID保持 • 生成したプロセスにメッセージ送信 • プロセスからの返り値を受け取る 1> Pid = spawn(yutori,loop,[]). <0,38,0> 2> Pid ! hello. olleh 3> 25
27.
プロセスの生成はspawn
26
28.
プロセスの生成
(終) 27
29.
メッセージパッシングに
戻ります 28
30.
receive文の 基本ルール
29
31.
先に到着した手紙からチェック (1/3)
last piyo piyo > receive fuga fuga Msg -> Msg end. hoge hoge first hoge 30
32.
先に到着した手紙からチェック (2/3)
last piyo piyo > receive fuga fuga Msg -> Msg end. first fuga 31
33.
先に到着した手紙からチェック (3/3)
last piyo piyo > receive Msg -> Msg end. first piyo 32
34.
receive文が パターンマッチに 失敗する場合
33
35.
マッチする手紙がある場合 • マッチする手紙まで飛ばす
last piyo piyo > receive fuga -> aguf end. fuga fuga hoge hoge first aguf 34
36.
マッチする手紙がない場合 • マッチする手紙が無い場合待ち続ける
last piyo > receive piyo fuga -> agug end. hoge hoge first 永遠に待ち続けないためのタイムアウト設定 ⇒ afterキーワード 35
37.
手紙の返事を返したい!
36
38.
返事を書くためには?
返信先 (Pid1) の • 返信先を知る必要がある ことを知ってい る必要がある Pid1 Pid2 (方法1) あらかじめPid1のことを知っておく (方法2) 手紙に返信先を書いてもらう 37
39.
(方法1) あらかじめ返信先を知る • こんな感じで関数への引数として保持しておく
loop(From)-> receive Msg -> From ! olleh, loop(From) end. • spawnする際に引数で返信先を与える – : spawn(yutori,loop,[self()]). 返信先が 定されている場合に 38
40.
(方法2) 手紙に返信先を書いてもらう • メッセージに自プロセスIDを記述
– : Pid2 ! {self(), hello}. loop()-> receive {From,Msg} -> From ! olleh, loop() end. こんな感じで受け取る プロセス毎に返信可能 39
41.
まとめ
40
42.
学んだこと • メッセージの送信方法: ! •
メッセージの開封方法: receive – パターンマッチによる開封順序の違い • プロセスの作り方: spawn – 末尾再帰によるメッセージ待機 – メッセージの返信方法 • Erlangシェルの使い方 – pid(), flush(), i() 41
43.
習 • プログラミングErlang8
プログラミング この の1,000倍ためになります 42
44.
おしまい
43
Download now