Enviar pesquisa
Carregar
イベント駆動プログラミングとI/O多重化
•
Transferir como PPTX, PDF
•
62 gostaram
•
15,531 visualizações
Gosuke Miyashita
Seguir
2年ぐらい前の社内勉強会で使った資料。
Leia menos
Leia mais
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 78
Baixar agora
Recomendados
例外設計における大罪
例外設計における大罪
Takuto Wada
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
Recomendados
例外設計における大罪
例外設計における大罪
Takuto Wada
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
infinite_loop
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
Koichiro Matsuoka
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
SQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリー
ke-m kamekoopa
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
Teppei Sato
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
gree_tech
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#
Yoshifumi Kawai
FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話
NipponAlgorithm
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
Tokoroten Nakayama
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
Yahoo!デベロッパーネットワーク
Mais conteúdo relacionado
Mais procurados
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
infinite_loop
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
Koichiro Matsuoka
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
SQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリー
ke-m kamekoopa
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
Teppei Sato
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
gree_tech
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#
Yoshifumi Kawai
FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話
NipponAlgorithm
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
Tokoroten Nakayama
Mais procurados
(20)
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
SQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリー
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
オブジェクト指向できていますか?
オブジェクト指向できていますか?
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Pythonによる黒魔術入門
Pythonによる黒魔術入門
Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#
FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
Semelhante a イベント駆動プログラミングと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
Semelhante a イベント駆動プログラミングと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
Mais 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
Mais 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.
参考文献
Baixar agora