Suche senden
Hochladen
イベント駆動プログラミングとI/O多重化
•
Als PPTX, PDF herunterladen
•
62 gefällt mir
•
15,536 views
Gosuke Miyashita
Folgen
2年ぐらい前の社内勉強会で使った資料。
Weniger lesen
Mehr lesen
Melden
Teilen
Melden
Teilen
1 von 78
Jetzt herunterladen
Empfohlen
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
例外設計における大罪
例外設計における大罪
Takuto Wada
Empfohlen
Glibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
例外設計における大罪
例外設計における大罪
Takuto Wada
Scapyで作る・解析するパケット
Scapyで作る・解析するパケット
Takaaki Hoyo
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
こわくない Git
こわくない Git
Kota Saito
FizzBuzzで学ぶJavaの進化
FizzBuzzで学ぶJavaの進化
虎の穴 開発室
冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
Yugo Shimizu
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた
Akihiro Kuwano
目grep入門 +解説
目grep入門 +解説
murachue
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once Semantics
Yoshiyasu SAEKI
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
Tomoya Kawanishi
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Yahoo!デベロッパーネットワーク
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
Yahoo!デベロッパーネットワーク
Weitere ähnliche Inhalte
Was ist angesagt?
Scapyで作る・解析するパケット
Scapyで作る・解析するパケット
Takaaki Hoyo
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
こわくない Git
こわくない Git
Kota Saito
FizzBuzzで学ぶJavaの進化
FizzBuzzで学ぶJavaの進化
虎の穴 開発室
冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
Yugo Shimizu
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた
Akihiro Kuwano
目grep入門 +解説
目grep入門 +解説
murachue
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once Semantics
Yoshiyasu SAEKI
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
Tomoya Kawanishi
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Yahoo!デベロッパーネットワーク
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
Was ist angesagt?
(20)
Scapyで作る・解析するパケット
Scapyで作る・解析するパケット
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
こわくない Git
こわくない Git
FizzBuzzで学ぶJavaの進化
FizzBuzzで学ぶJavaの進化
冬のLock free祭り safe
冬のLock free祭り safe
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた
目grep入門 +解説
目grep入門 +解説
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once Semantics
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Ähnlich wie イベント駆動プログラミングと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
Ähnlich wie イベント駆動プログラミングと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
Mehr von 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
Mehr von 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.
参考文献
Jetzt herunterladen