Soumettre la recherche
Mettre en ligne
イベント駆動プログラミングとI/O多重化
•
Télécharger en tant que PPTX, PDF
•
62 j'aime
•
15,536 vues
Gosuke Miyashita
Suivre
2年ぐらい前の社内勉強会で使った資料。
Lire moins
Lire la suite
Signaler
Partager
Signaler
Partager
1 sur 78
Télécharger maintenant
Recommandé
例外設計における大罪
例外設計における大罪
Takuto Wada
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
目grep入門 +解説
目grep入門 +解説
murachue
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
テストコードの DRY と DAMP
テストコードの DRY と DAMP
Yusuke Kagata
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
Recommandé
例外設計における大罪
例外設計における大罪
Takuto Wada
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
目grep入門 +解説
目grep入門 +解説
murachue
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
テストコードの DRY と DAMP
テストコードの DRY と DAMP
Yusuke Kagata
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
kwatch
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
C#とILとネイティブと
C#とILとネイティブと
信之 岩永
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
kwatch
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
sairoutine
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
webエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのredis
nasa9084
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
Yahoo!デベロッパーネットワーク
Contenu connexe
Tendances
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
kwatch
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
増田 亨
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
イベント・ソーシングを知る
イベント・ソーシングを知る
Shuhei Fujita
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
C#とILとネイティブと
C#とILとネイティブと
信之 岩永
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
kwatch
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
sairoutine
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
webエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのredis
nasa9084
Tendances
(20)
TLS, HTTP/2演習
TLS, HTTP/2演習
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Redisの特徴と活用方法について
Redisの特徴と活用方法について
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
Pythonによる黒魔術入門
Pythonによる黒魔術入門
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
イベント・ソーシングを知る
イベント・ソーシングを知る
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
C#とILとネイティブと
C#とILとネイティブと
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
Docker Compose 徹底解説
Docker Compose 徹底解説
webエンジニアのためのはじめてのredis
webエンジニアのためのはじめてのredis
Similaire à イベント駆動プログラミングとI/O多重化
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
Yahoo!デベロッパーネットワーク
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
Yosuke Mizutani
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
UnityTechnologiesJapan002
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Yoshifumi Kawai
Ajax 応用
Ajax 応用
Katsuyuki Seino
NAO/Pepper 開発環境 について
NAO/Pepper 開発環境 について
Takuji Kawata
Serfが面白いと俺の中で話題にwwwwww
Serfが面白いと俺の中で話題にwwwwww
Masahito Zembutsu
Chrome DevTools.next
Chrome DevTools.next
yoshikawa_t
How To Drink Wsgi
How To Drink Wsgi
Atsushi Odagiri
Apache geode at-s1p
Apache geode at-s1p
Masaki Yamakawa
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
Mori Shingo
Windows 8時代のUXを支える非同期プログラミング
Windows 8時代のUXを支える非同期プログラミング
Yuya Yamaki
C#の書き方
C#の書き方
信之 岩永
C#の書き方
C#の書き方
信之 岩永
20130315 abc firefox_os
20130315 abc firefox_os
Tomoaki Konno
HTML5&API総まくり
HTML5&API総まくり
Shumpei Shiraishi
Programming camp Codereading
Programming camp Codereading
Hiro Yoshioka
Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~
Masahito Zembutsu
UniRx - Reactive Extensions for Unity
UniRx - Reactive Extensions for Unity
Yoshifumi Kawai
Similaire à イベント駆動プログラミングとI/O多重化
(20)
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Ajax 応用
Ajax 応用
NAO/Pepper 開発環境 について
NAO/Pepper 開発環境 について
Serfが面白いと俺の中で話題にwwwwww
Serfが面白いと俺の中で話題にwwwwww
Chrome DevTools.next
Chrome DevTools.next
How To Drink Wsgi
How To Drink Wsgi
Apache geode at-s1p
Apache geode at-s1p
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
Windows 8時代のUXを支える非同期プログラミング
Windows 8時代のUXを支える非同期プログラミング
C#の書き方
C#の書き方
C#の書き方
C#の書き方
20130315 abc firefox_os
20130315 abc firefox_os
HTML5&API総まくり
HTML5&API総まくり
Programming camp Codereading
Programming camp Codereading
Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~
UniRx - Reactive Extensions for Unity
UniRx - Reactive Extensions for Unity
Plus de Gosuke Miyashita
Walter ファミリーの紹介 at Shibuya.go#1
Walter ファミリーの紹介 at Shibuya.go#1
Gosuke Miyashita
Serverspec at Testing Framework Meeting
Serverspec at Testing Framework Meeting
Gosuke Miyashita
Serverspec at July Tech Festa 2013
Serverspec at July Tech Festa 2013
Gosuke Miyashita
Serverspec at hbstudy #45
Serverspec at hbstudy #45
Gosuke Miyashita
NoSQLに関するまとめ
NoSQLに関するまとめ
Gosuke Miyashita
Maglica - A Simple Internal Cloud Tool at #techkayac
Maglica - A Simple Internal Cloud Tool at #techkayac
Gosuke Miyashita
DevOps とは何か 何であるべきか
DevOps とは何か 何であるべきか
Gosuke Miyashita
Inside Sqale's Backend at RubyConf Taiwan 2012
Inside Sqale's Backend at RubyConf Taiwan 2012
Gosuke Miyashita
Ia型超新星とチャンドラセカール限界
Ia型超新星とチャンドラセカール限界
Gosuke Miyashita
How Perl Changed My Life
How Perl Changed My Life
Gosuke Miyashita
Inside Sqale's Backend at YAPC::Asia Tokyo 2012
Inside Sqale's Backend at YAPC::Asia Tokyo 2012
Gosuke Miyashita
Inside Sqale's Backend at Sapporo Ruby Kaigi 2012
Inside Sqale's Backend at Sapporo Ruby Kaigi 2012
Gosuke Miyashita
Assurer - a pluggable server testing/monitoring framework
Assurer - a pluggable server testing/monitoring framework
Gosuke Miyashita
Open Source System Administration Framework - Func
Open Source System Administration Framework - Func
Gosuke Miyashita
10分でわかるDevOps
10分でわかるDevOps
Gosuke Miyashita
DevOpsって何?
DevOpsって何?
Gosuke Miyashita
Puppetのススメ
Puppetのススメ
Gosuke Miyashita
Puppet Best Practices? at COOKPAD
Puppet Best Practices? at COOKPAD
Gosuke Miyashita
How Danga::Socket handles asynchronous processing and how to write asynchrono...
How Danga::Socket handles asynchronous processing and how to write asynchrono...
Gosuke Miyashita
Danga::Socketの非同期処理の仕組みとPerlbalで非同期処理するプラグインを書く方法
Danga::Socketの非同期処理の仕組みとPerlbalで非同期処理するプラグインを書く方法
Gosuke Miyashita
Plus de Gosuke Miyashita
(20)
Walter ファミリーの紹介 at Shibuya.go#1
Walter ファミリーの紹介 at Shibuya.go#1
Serverspec at Testing Framework Meeting
Serverspec at Testing Framework Meeting
Serverspec at July Tech Festa 2013
Serverspec at July Tech Festa 2013
Serverspec at hbstudy #45
Serverspec at hbstudy #45
NoSQLに関するまとめ
NoSQLに関するまとめ
Maglica - A Simple Internal Cloud Tool at #techkayac
Maglica - A Simple Internal Cloud Tool at #techkayac
DevOps とは何か 何であるべきか
DevOps とは何か 何であるべきか
Inside Sqale's Backend at RubyConf Taiwan 2012
Inside Sqale's Backend at RubyConf Taiwan 2012
Ia型超新星とチャンドラセカール限界
Ia型超新星とチャンドラセカール限界
How Perl Changed My Life
How Perl Changed My Life
Inside Sqale's Backend at YAPC::Asia Tokyo 2012
Inside Sqale's Backend at YAPC::Asia Tokyo 2012
Inside Sqale's Backend at Sapporo Ruby Kaigi 2012
Inside Sqale's Backend at Sapporo Ruby Kaigi 2012
Assurer - a pluggable server testing/monitoring framework
Assurer - a pluggable server testing/monitoring framework
Open Source System Administration Framework - Func
Open Source System Administration Framework - Func
10分でわかるDevOps
10分でわかるDevOps
DevOpsって何?
DevOpsって何?
Puppetのススメ
Puppetのススメ
Puppet Best Practices? at COOKPAD
Puppet Best Practices? at COOKPAD
How Danga::Socket handles asynchronous processing and how to write asynchrono...
How Danga::Socket handles asynchronous processing and how to write asynchrono...
Danga::Socketの非同期処理の仕組みとPerlbalで非同期処理するプラグインを書く方法
Danga::Socketの非同期処理の仕組みとPerlbalで非同期処理するプラグインを書く方法
イベント駆動プログラミングとI/O多重化
1.
イベント駆動プログラミン
グと I/O多重化
2.
イベント駆動プログラミング
3.
イベントを待機し、起こっ たイベントに従って処理を 行うプログラミングパラダ
イム
4.
フロー駆動型プログラミン グと呼ばれる従来のプログ ラミングパラダイムに対す
る概念
5.
GUIプログラミング
6.
キーやマウスの入力をイベ ントとして受け取って処理
7.
ネットワークプログラミ
ング
8.
ネットワークI/Oを多重化して 1プロセス1スレッドで複数の ネットワーク接続を同時に捌
く
9.
非イベント駆動な ネットワークプログラミング
process Client or thread process Client or thread process Client or thread
10.
イベント駆動な ネットワークプログラミング Client
process Client or thread Client
11.
今回はこっちがメイ
ン
12.
The C10K Problem
13.
イベント駆動型プロ グラミングの処理フ
ロー
14.
element.addEventListener(
’click’, function(){ console.log(‘hoge’) }, true );
15.
これってどう動いてる
の?
16.
イベントループ (メインループ)
17.
イベント登録 イベント待ち イベント処理 後処理
18.
高レベルな言語では イベントループを自分で 書く必要はない
19.
element.addEventListener(
’click’, function(){ console.log(‘hoge’) }, true );
20.
後で自分で書くと どうなるか解説します
21.
イベントの種類
22.
タイマー
23.
I/O
24.
シグナル
25.
子プロセス
26.
イベント登録 イベント待ち イベント処理 後処理
27.
イベントループの話
おしまい
28.
I/O多重化
29.
ネットワークプログラミ ングにおけるイベント駆
動の要
30.
これなくして1プロセス1ス レッドで複数のネットワー ク接続を同時捌くことはで
きない
31.
なぜ1プロセス1スレッ ドで捌く必要があるの
か?
32.
The C10K Problem
でググれ
33.
I/O多重化の仕組み
34.
I/Oイベント登
録 I/Oイベント待 ち I/Oイベント処 理 後処理
35.
非同期echoサーバを 題材にサンプルコードで見
る
36.
多重化してない例
37.
int sock =
socket(PF_INET, SOCK_STREAM); bind(sock, addr); listen(sock); while ( 1 ) { int new_sock = accept(sock, &addr); char buf[100]; size_t size = read(new_sock, buf, 100); if ( size == 0 ) { close(new_sock); } else { write(new_sock, buf, size); } }
38.
多重化での処理の流れ
39.
クライアント 待ち受けソケット (イベント監視対象
サーバ につっこむ)
40.
クライアント 待ち受けソケット (イベント監視対象)
サーバ
41.
クライアント
accept(sock) 待ち受けソケット 接続ソケット (イベント監視対象) サーバ (イベント監視 対象につっこ む)
42.
クライアント 待ち受けソケット
接続ソケット (イベント監視対象) サーバ (イベント監視対 象)
43.
selectによる多重化
44.
https://gist.github.com/mizzy/5343931
45.
epollによる多重化
46.
https://gist.github.com/mizzy/5343937
47.
多重化用関数
48.
select
poll epoll kqueue /dev/poll
49.
select/pollは全部の ソケットを調べる
50.
epoll, kqueue, /dev/pollはイ ベントが発生したソケット だけを調べることができる
51.
イベントライブラリ
52.
libevent libev
53.
OSによる違いを吸収
してくれる
54.
I/O多重化以外にもタイ マーイベントやシグナル イベントなんかも扱える
55.
node.jsは libevent + libeio
56.
各種言語による 非同期echoサーバ
57.
Perl (AnyEvent)
58.
https://gist.github.com/mizzy/5343944
59.
Ruby (EventMachine)
60.
https://gist.github.com/mizzy/5343953
61.
Python (twisted)
62.
https://gist.github.com/mizzy/5343956
63.
Python (eventlet)
64.
https://gist.github.com/mizzy/5343959
65.
node.js
66.
https://gist.github.com/mizzy/5343964
67.
イベント駆動プログラミン
グのデメリット
68.
マルチコアでスケールしな
い
69.
処理の流れが追いにくい
書きにくい
70.
var req_to_zenrin =
http.request( options, function(res2) { res2.on('end', function() { res.end(); }); res2.on('data', function(chunk) { res.write(chunk); }); } );
71.
var referer; sdb.getItem(
'gha', host, function( error, result ) { if ( result ) { referer = ‘http://hoge.com/’; } } ); // sdb.getItem()終了前に次の処理
72.
sdb.getItem(
'gha', host, function( error, result ) { if ( result ) { access_to_zenrin('http://hoge.com'); } else { access_to_zenrin(); } } );
73.
ネットワークアクセスを伴
う 処理をすべて非同期で 書かないといけない
74.
なのでlibmysqlclientは
使えない
75.
node-mysqlはlibmysqlclient 相当の処理を再実装してる
(っぽい)
76.
参考文献
Télécharger maintenant