Submit Search
Upload
イベント駆動プログラミングとI/O多重化
•
Download as PPTX, PDF
•
62 likes
•
15,534 views
Gosuke Miyashita
Follow
2年ぐらい前の社内勉強会で使った資料。
Read less
Read more
Report
Share
Report
Share
1 of 78
Download now
Recommended
例外設計における大罪
例外設計における大罪
Takuto Wada
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
Atsushi Nakada
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
Recommended
例外設計における大罪
例外設計における大罪
Takuto Wada
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
Atsushi Nakada
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Shota Shinogi
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
sairoutine
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
基礎線形代数講座
基礎線形代数講座
SEGADevTech
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテスト
ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテスト
KLab Inc. / Tech
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Shin Ohno
Marp Tutorial
Marp Tutorial
Rui Watanabe
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
できる!並列・並行プログラミング
できる!並列・並行プログラミング
Preferred Networks
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
Teppei Sato
テストコードの DRY と DAMP
テストコードの DRY と DAMP
Yusuke Kagata
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
Yahoo!デベロッパーネットワーク
More Related Content
What's hot
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Shota Shinogi
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
sairoutine
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
基礎線形代数講座
基礎線形代数講座
SEGADevTech
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテスト
ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテスト
KLab Inc. / Tech
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Shin Ohno
Marp Tutorial
Marp Tutorial
Rui Watanabe
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
できる!並列・並行プログラミング
できる!並列・並行プログラミング
Preferred Networks
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
Teppei Sato
テストコードの DRY と DAMP
テストコードの DRY と DAMP
Yusuke Kagata
What's hot
(20)
オブジェクト指向できていますか?
オブジェクト指向できていますか?
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
TLS, HTTP/2演習
TLS, HTTP/2演習
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
DockerコンテナでGitを使う
DockerコンテナでGitを使う
基礎線形代数講座
基礎線形代数講座
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテスト
ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテスト
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Marp Tutorial
Marp Tutorial
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
できる!並列・並行プログラミング
できる!並列・並行プログラミング
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
テストコードの DRY と DAMP
テストコードの DRY と DAMP
Similar to イベント駆動プログラミングと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
Similar to イベント駆動プログラミングと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
More from 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
More from 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.
参考文献
Download now