Enviar búsqueda
Cargar
Erlangのマルチプロセスを触ってみた
•
1 recomendación
•
877 vistas
Yoichi Toyota
Seguir
Denunciar
Compartir
Denunciar
Compartir
1 de 14
Descargar ahora
Descargar para leer sin conexión
Recomendados
Web技術勉強会 20111112
Web技術勉強会 20111112
龍一 田中
Xtend30分クッキング やきに駆動
Xtend30分クッキング やきに駆動
Shinichi Kozake
Xtend30分クッキング
Xtend30分クッキング
Shinichi Kozake
Boostライブラリ一周の旅
Boostライブラリ一周の旅
Akira Takahashi
Xtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使う
Tatsumi Naganuma
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
Masatoshi Tada
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
YujiSoftware
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方
Satoshi Nagayasu
Recomendados
Web技術勉強会 20111112
Web技術勉強会 20111112
龍一 田中
Xtend30分クッキング やきに駆動
Xtend30分クッキング やきに駆動
Shinichi Kozake
Xtend30分クッキング
Xtend30分クッキング
Shinichi Kozake
Boostライブラリ一周の旅
Boostライブラリ一周の旅
Akira Takahashi
Xtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使う
Tatsumi Naganuma
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
JPAの同時実行制御とロック20140518 #ccc_r15 #jjug_ccc
Masatoshi Tada
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
YujiSoftware
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方
Satoshi Nagayasu
Project Loom + Project Panama
Project Loom + Project Panama
Yuichi Sakuraba
講座Java入門
講座Java入門
Tokai University
Unit test in android
Unit test in android
Tatsuya Maki
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
Away3D 4.1 パーティクル入門
Away3D 4.1 パーティクル入門
Yasunobu Ikeda
あるコンテキストスイッチの話
あるコンテキストスイッチの話
nullnilaki
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
Kazuki Onishi
from old java to java8 - KanJava Edition
from old java to java8 - KanJava Edition
心 谷本
xUTP Chapter26. Dependency Injection
xUTP Chapter26. Dependency Injection
Takuto Wada
R_note_ODE_ver1.0
R_note_ODE_ver1.0
Satoshi Kume
デバドラを書いてみよう!
デバドラを書いてみよう!
Masami Ichikawa
jQuery.Deferredってシンプルなんだぜ
jQuery.Deferredってシンプルなんだぜ
Kotaro Kawashima
PostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろう
kasaharatt
About Jobs
About Jobs
Shinichi Kozake
20180123 power shell
20180123 power shell
Trainocate Japan, Ltd.
大江戸Ruby会議01 "mission critical"なシステムでも使えるThreadの作り方
大江戸Ruby会議01 "mission critical"なシステムでも使えるThreadの作り方
Mayumi Emori
Rakuten tech conf
Rakuten tech conf
Koichi Fujikawa
Cloud computing competition by Hapyrus
Cloud computing competition by Hapyrus
Koichi Fujikawa
Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド -
Yuichi Sakuraba
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
JPCERT Coordination Center
ゆとりがErlangを始めるようです
ゆとりがErlangを始めるようです
sleepy_yoshi
Erlangを触ってみた
Erlangを触ってみた
Yoichi Toyota
Más contenido relacionado
La actualidad más candente
Project Loom + Project Panama
Project Loom + Project Panama
Yuichi Sakuraba
講座Java入門
講座Java入門
Tokai University
Unit test in android
Unit test in android
Tatsuya Maki
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
Away3D 4.1 パーティクル入門
Away3D 4.1 パーティクル入門
Yasunobu Ikeda
あるコンテキストスイッチの話
あるコンテキストスイッチの話
nullnilaki
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
Kazuki Onishi
from old java to java8 - KanJava Edition
from old java to java8 - KanJava Edition
心 谷本
xUTP Chapter26. Dependency Injection
xUTP Chapter26. Dependency Injection
Takuto Wada
R_note_ODE_ver1.0
R_note_ODE_ver1.0
Satoshi Kume
デバドラを書いてみよう!
デバドラを書いてみよう!
Masami Ichikawa
jQuery.Deferredってシンプルなんだぜ
jQuery.Deferredってシンプルなんだぜ
Kotaro Kawashima
PostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろう
kasaharatt
About Jobs
About Jobs
Shinichi Kozake
20180123 power shell
20180123 power shell
Trainocate Japan, Ltd.
大江戸Ruby会議01 "mission critical"なシステムでも使えるThreadの作り方
大江戸Ruby会議01 "mission critical"なシステムでも使えるThreadの作り方
Mayumi Emori
Rakuten tech conf
Rakuten tech conf
Koichi Fujikawa
Cloud computing competition by Hapyrus
Cloud computing competition by Hapyrus
Koichi Fujikawa
Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド -
Yuichi Sakuraba
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
JPCERT Coordination Center
La actualidad más candente
(20)
Project Loom + Project Panama
Project Loom + Project Panama
講座Java入門
講座Java入門
Unit test in android
Unit test in android
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Away3D 4.1 パーティクル入門
Away3D 4.1 パーティクル入門
あるコンテキストスイッチの話
あるコンテキストスイッチの話
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
from old java to java8 - KanJava Edition
from old java to java8 - KanJava Edition
xUTP Chapter26. Dependency Injection
xUTP Chapter26. Dependency Injection
R_note_ODE_ver1.0
R_note_ODE_ver1.0
デバドラを書いてみよう!
デバドラを書いてみよう!
jQuery.Deferredってシンプルなんだぜ
jQuery.Deferredってシンプルなんだぜ
PostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろう
About Jobs
About Jobs
20180123 power shell
20180123 power shell
大江戸Ruby会議01 "mission critical"なシステムでも使えるThreadの作り方
大江戸Ruby会議01 "mission critical"なシステムでも使えるThreadの作り方
Rakuten tech conf
Rakuten tech conf
Cloud computing competition by Hapyrus
Cloud computing competition by Hapyrus
Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド -
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
Destacado
ゆとりがErlangを始めるようです
ゆとりがErlangを始めるようです
sleepy_yoshi
Erlangを触ってみた
Erlangを触ってみた
Yoichi Toyota
POSIX中心主義と情報科学教育
POSIX中心主義と情報科学教育
Tomoyuki Matsuura
BDM37 - Simon Grondin - Scaling an API proxy in OCaml
BDM37 - Simon Grondin - Scaling an API proxy in OCaml
Big Data Montreal
恐怖!シェルショッカー1号男
恐怖!シェルショッカー1号男
Tomoyuki Matsuura
恐怖!シェルショッカーの POSIX原理主義シェルスクリプト
恐怖!シェルショッカーの POSIX原理主義シェルスクリプト
Richie Shellshoccar
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
Tsunenori Oohara
Destacado
(7)
ゆとりがErlangを始めるようです
ゆとりがErlangを始めるようです
Erlangを触ってみた
Erlangを触ってみた
POSIX中心主義と情報科学教育
POSIX中心主義と情報科学教育
BDM37 - Simon Grondin - Scaling an API proxy in OCaml
BDM37 - Simon Grondin - Scaling an API proxy in OCaml
恐怖!シェルショッカー1号男
恐怖!シェルショッカー1号男
恐怖!シェルショッカーの POSIX原理主義シェルスクリプト
恐怖!シェルショッカーの POSIX原理主義シェルスクリプト
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
Similar a Erlangのマルチプロセスを触ってみた
Elixirだ 第2回
Elixirだ 第2回
Joe_noh
Akka Unit Testing
Akka Unit Testing
Masashi (Jangsa) Kawaguchi
Uart受信設計2013
Uart受信設計2013
Kiyoshi Ogawa
PHP AST 徹底解説
PHP AST 徹底解説
do_aki
JavaScript 講習会 #1
JavaScript 講習会 #1
Susisu
Boost Fusion Library
Boost Fusion Library
Akira Takahashi
あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)
Takuya Tsuchida
プログラミング言語Scala
プログラミング言語Scala
TanUkkii
Similar a Erlangのマルチプロセスを触ってみた
(8)
Elixirだ 第2回
Elixirだ 第2回
Akka Unit Testing
Akka Unit Testing
Uart受信設計2013
Uart受信設計2013
PHP AST 徹底解説
PHP AST 徹底解説
JavaScript 講習会 #1
JavaScript 講習会 #1
Boost Fusion Library
Boost Fusion Library
あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)
プログラミング言語Scala
プログラミング言語Scala
Más de Yoichi Toyota
超フランクにスクラムの大事なことの話をする
超フランクにスクラムの大事なことの話をする
Yoichi Toyota
ジャワカレーをおいしく作る最後の一押し
ジャワカレーをおいしく作る最後の一押し
Yoichi Toyota
ライブラリを作る思考回路
ライブラリを作る思考回路
Yoichi Toyota
DynamoDB設計のちょっとした技
DynamoDB設計のちょっとした技
Yoichi Toyota
はじめてのDynamoDBスキーマ設計
はじめてのDynamoDBスキーマ設計
Yoichi Toyota
オブジェクト指向についてあまり知られていないこと
オブジェクト指向についてあまり知られていないこと
Yoichi Toyota
Ruby is comming ractor編
Ruby is comming ractor編
Yoichi Toyota
array.map(&:key)ってなんやねん
array.map(&:key)ってなんやねん
Yoichi Toyota
はじめてのPull Request
はじめてのPull Request
Yoichi Toyota
Railsの開発環境作るぞ
Railsの開発環境作るぞ
Yoichi Toyota
jqで極めるシェル芸の話
jqで極めるシェル芸の話
Yoichi Toyota
足し算をつくろう
足し算をつくろう
Yoichi Toyota
React Hooksでカスタムフックをつくろう
React Hooksでカスタムフックをつくろう
Yoichi Toyota
ActionCableのクライアントはRails外から利用できるのか
ActionCableのクライアントはRails外から利用できるのか
Yoichi Toyota
サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方
Yoichi Toyota
SPA時代のOGPとの戦い方
SPA時代のOGPとの戦い方
Yoichi Toyota
AWS WAFでらくらくファイアーウォール生活
AWS WAFでらくらくファイアーウォール生活
Yoichi Toyota
Docker in production
Docker in production
Yoichi Toyota
How to fight against “full scratch disease”
How to fight against “full scratch disease”
Yoichi Toyota
Amazon lexを触ってみた
Amazon lexを触ってみた
Yoichi Toyota
Más de Yoichi Toyota
(20)
超フランクにスクラムの大事なことの話をする
超フランクにスクラムの大事なことの話をする
ジャワカレーをおいしく作る最後の一押し
ジャワカレーをおいしく作る最後の一押し
ライブラリを作る思考回路
ライブラリを作る思考回路
DynamoDB設計のちょっとした技
DynamoDB設計のちょっとした技
はじめてのDynamoDBスキーマ設計
はじめてのDynamoDBスキーマ設計
オブジェクト指向についてあまり知られていないこと
オブジェクト指向についてあまり知られていないこと
Ruby is comming ractor編
Ruby is comming ractor編
array.map(&:key)ってなんやねん
array.map(&:key)ってなんやねん
はじめてのPull Request
はじめてのPull Request
Railsの開発環境作るぞ
Railsの開発環境作るぞ
jqで極めるシェル芸の話
jqで極めるシェル芸の話
足し算をつくろう
足し算をつくろう
React Hooksでカスタムフックをつくろう
React Hooksでカスタムフックをつくろう
ActionCableのクライアントはRails外から利用できるのか
ActionCableのクライアントはRails外から利用できるのか
サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方
SPA時代のOGPとの戦い方
SPA時代のOGPとの戦い方
AWS WAFでらくらくファイアーウォール生活
AWS WAFでらくらくファイアーウォール生活
Docker in production
Docker in production
How to fight against “full scratch disease”
How to fight against “full scratch disease”
Amazon lexを触ってみた
Amazon lexを触ってみた
Erlangのマルチプロセスを触ってみた
1.
株式会社エクストーン 下っ端 豊田陽一
2.
! プログラミングErlang ◦ Erlangの強力な並列性に触れてみよう "
モジュール " 関数定義 " プロセス間のメッセージ送信 " OTP
3.
! 1つのファイルにまとめられた関数群 === test1.erl
=== -module(test1) -export([add/2]) add(a, b) -> a + b. === test1.erl === 1> c(test1) {ok,test1} 2> test1:add(1, 2). 3 モジュール名の宣言 このモジュールで外部に公開する関数の宣言 関数定義
4.
! パターンマッチ ◦ 引数のパターンに応じて呼び出すコード を変えることが出来る torpedo({_,
submarine}) -> true; torpedo({_, 'heavy torpedo cruiser'}) -> true; torpedo({_, _}) -> false. 1> test1:torpedo({“Kitakami”, ‘heavy torpedo cruiser’). true 2> test1:torpedo({“Kongo”, battleship}). false
5.
! ガード ◦ パターンマッチより詳細な条件を記述 torpedo_submarine(Level,
Ko_Hyoteki) -> when Ko_Hyoteki =:= true ; Level >= 10 true; torpedo_submarine(_, _) -> false. 1> test1:torpedo_submarine(12, false). true 2> test1:torpedo_submarine(8, true). true 3> test1:torpedo_submarine(8, false). false
6.
! ガードと似ている night_combat(MainWeapon, SubWeapon, Torpedo)
-> if Torpedo >= 2 ; MainWeapon >= 3 ; MainWeapon =:= 2 andalso SubWeapon >= 1 ; MainWeapon >= 1 andalso MainWeapon =< 2 andalso Torpedo =:= 1 -> cutin; MainWeapon =:= 2 andalso SubWeapon =:= 0 andalso Torpedo =:= 0 ; MainWeapon =:= 1 andalso SubWeapon >= 1 andalso Torpedo =:= 0 ; MainWeapon =:= 0 andalso SubWeapon >= 2 andalso Torpedo =< 1 -> 'double strike'; true -> 'single strike' end. 1> test1:night_combat(1, 1, 1). cutin 2> test1:night_combat(1, 0, 0). ‘single strike’
7.
! spawn/1 ◦ 関数を引数に取り、プロセスを作成 ◦
別のプロセスの実行結果は受け取れない 1> F = fun() -> 1 + 2 end. #Fun<erl_eval.20.80484245> 2> spawn(F). <0.35.0>
8.
! ! (Bang) ◦ Pidにメッセージを送信する 1>
self() ! hello. hello 2> self() ! ‘hello world’. ‘hello world’ 3> flush(). Shell got hello Shell got 'hello world' ok
9.
receive ! ◦ メッセージを受信 1> Func
= fun() -> receive {Pid, N} when N rem 2 =:= 0 -> Pid ! even; {Pid, _} -> Pid ! odd; end end. #Fun<erl_eval.20.80484245> 2> Rmt = spawn(Func). <0, 34, 0> 3> Rmt ! {self(), 4}. {self(), 4} 4> flush(). Shell got even ok
10.
! プロセス間で作成される特定の関係 ◦ 片方が死ぬともう片方も死ぬ 1> self(). <0.41.0> 2>
spawn_link( fun() -> timer:sleep(5000), exit(reason) end). <0.45.0> ** exception error: reason 3> self(). <0.51.0>
11.
! プロセスの監視を行う ◦ プロセスが死んだらメッセージを受信 restarter() -> receive {'DOWN',
Ref, process, Pid, Reason} -> spawn_monitor(fun test1:hoge/0), restarter() after 10000 -> ok end. hoge() -> io:format("hoge~n", []), timer:sleep(5000).
12.
! 実行してみる 1> spawn_monitor(fun
test1:hoge/0). hoge {<0.44.0>,#Ref<0.0.0.111>} 2> test1:restarter(). hoge hoge hoge hoge
13.
! モニター開始/終了 ◦ erlang:monitor(process,
Pid) -> Ref " Pidのプロセスをモニター開始 ◦ erlang:demonitor(Ref) -> true " モニター終了 ! 監視している側にメッセージが届く ◦ { DOWN , Ref, process, Pid, Reason} " DOWN :シンボル " Ref:監視しているモニターオブジェクトの参 照 " Pid:死んだプロセスのID " Reason:プロセスが死んだ理由
14.
! プロセス通信の基本部分を見てみた ◦ 次回はいよいよOTPに踏み込んで、実用 的なアプリケーションの話をします ◦
多分…
Descargar ahora