Movatterモバイル変換


[0]ホーム

URL:


Gosuke Miyashita, profile picture
Uploaded byGosuke Miyashita
PPTX, PDF15,912 views

イベント駆動プログラミングとI/O多重化

2年ぐらい前の社内勉強会で使った資料。

Embed presentation

Downloaded 94 times
イベント駆動プログラミン       グと    I/O多重化
イベント駆動プログラミング
イベントを待機し、起こったイベントに従って処理を行うプログラミングパラダ     イム
フロー駆動型プログラミングと呼ばれる従来のプログラミングパラダイムに対す     る概念
GUIプログラミング
キーやマウスの入力をイベントとして受け取って処理
ネットワークプログラミ     ング
ネットワークI/Oを多重化して1プロセス1スレッドで複数のネットワーク接続を同時に捌       く
非イベント駆動なネットワークプログラミング           processClient       or           thread           processClient       or           thread           processClient       or           thread
イベント駆動なネットワークプログラミングClient           processClient       or           threadClient
今回はこっちがメイ    ン
The C10K Problem
イベント駆動型プログラミングの処理フ    ロー
element.addEventListener(   ’click’,   function(){ console.log(‘hoge’) },   true);
これってどう動いてる    の?
イベントループ(メインループ)
イベント登録イベント待ちイベント処理 後処理
高レベルな言語ではイベントループを自分で  書く必要はない
element.addEventListener(   ’click’,   function(){ console.log(‘hoge’) },   true);
後で自分で書くとどうなるか解説します
イベントの種類
タイマー
I/O
シグナル
子プロセス
イベント登録イベント待ちイベント処理 後処理
イベントループの話   おしまい
I/O多重化
ネットワークプログラミングにおけるイベント駆    動の要
これなくして1プロセス1スレッドで複数のネットワーク接続を同時捌くことはで     きない
なぜ1プロセス1スレッドで捌く必要があるの     か?
The C10K Problem    でググれ
I/O多重化の仕組み
I/Oイベント登    録I/Oイベント待    ちI/Oイベント処    理  後処理
非同期echoサーバを題材にサンプルコードで見       る
多重化してない例
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);  }}
多重化での処理の流れ
クライアント 待ち受けソケット(イベント監視対象    サーバ  につっこむ)
クライアント 待ち受けソケット(イベント監視対象)    サーバ
クライアント                    accept(sock) 待ち受けソケット                  接続ソケット(イベント監視対象)    サーバ                           (イベント監視                           対象につっこ                             む)
クライアント 待ち受けソケット              接続ソケット(イベント監視対象)    サーバ                      (イベント監視対                         象)
selectによる多重化
https://gist.github.com/mizzy/5343931
epollによる多重化
https://gist.github.com/mizzy/5343937
多重化用関数
select   poll  epoll kqueue/dev/poll
select/pollは全部のソケットを調べる
epoll, kqueue, /dev/pollはイベントが発生したソケットだけを調べることができる
イベントライブラリ
libevent  libev
OSによる違いを吸収   してくれる
I/O多重化以外にもタイマーイベントやシグナルイベントなんかも扱える
node.jsはlibevent + libeio
各種言語による非同期echoサーバ
Perl(AnyEvent)
https://gist.github.com/mizzy/5343944
Ruby(EventMachine)
https://gist.github.com/mizzy/5343953
Python(twisted)
https://gist.github.com/mizzy/5343956
Python(eventlet)
https://gist.github.com/mizzy/5343959
node.js
https://gist.github.com/mizzy/5343964
イベント駆動プログラミン   グのデメリット
マルチコアでスケールしな      い
処理の流れが追いにくい   書きにくい
var req_to_zenrin = http.request(   options,   function(res2) {     res2.on('end', function() {         res.end();     });     res2.on('data', function(chunk) {         res.write(chunk);     });   });
var referer;sdb.getItem(   'gha',   host,   function( error, result ) {     if ( result ) {        referer = ‘http://hoge.com/’;      }   });// sdb.getItem()終了前に次の処理
sdb.getItem(   'gha',   host,   function( error, result ) {     if ( result ) {        access_to_zenrin('http://hoge.com');      }     else {        access_to_zenrin();     }   });
ネットワークアクセスを伴      う 処理をすべて非同期で  書かないといけない
なのでlibmysqlclientは   使えない
node-mysqlはlibmysqlclient相当の処理を再実装してる      (っぽい)
参考文献
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化

Recommended

PDF
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
PPTX
Metaspace
PPTX
冬のLock free祭り safe
PDF
暗号技術の実装と数学
PDF
できる!並列・並行プログラミング
PPT
Glibc malloc internal
PPTX
Redisの特徴と活用方法について
PDF
怖くないSpring Bootのオートコンフィグレーション
PDF
【Unite Tokyo 2019】Understanding C# Struct All Things
PDF
きつねさんでもわかるLlvm読書会 第2回
PDF
こわくない Git
PDF
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
PDF
SAT/SMTソルバの仕組み
PDF
ネットワーク ゲームにおけるTCPとUDPの使い分け
PDF
PDF
例外設計における大罪
PDF
ゲーム開発者のための C++11/C++14
PDF
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
PDF
テスト文字列に「うんこ」と入れるな
PDF
C++ マルチスレッドプログラミング
PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
PDF
Where狙いのキー、order by狙いのキー
PDF
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
PPTX
DockerコンテナでGitを使う
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
PDF
オンラインゲームの仕組みと工夫
PPTX
分散システムについて語らせてくれ
PPTX
本当は恐ろしい分散システムの話
PDF
Node.js入門
PDF
Kyoto Tycoon Guide in Japanese

More Related Content

PDF
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
PPTX
Metaspace
PPTX
冬のLock free祭り safe
PDF
暗号技術の実装と数学
PDF
できる!並列・並行プログラミング
PPT
Glibc malloc internal
PPTX
Redisの特徴と活用方法について
PDF
怖くないSpring Bootのオートコンフィグレーション
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Metaspace
冬のLock free祭り safe
暗号技術の実装と数学
できる!並列・並行プログラミング
Glibc malloc internal
Redisの特徴と活用方法について
怖くないSpring Bootのオートコンフィグレーション

What's hot

PDF
【Unite Tokyo 2019】Understanding C# Struct All Things
PDF
きつねさんでもわかるLlvm読書会 第2回
PDF
こわくない Git
PDF
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
PDF
SAT/SMTソルバの仕組み
PDF
ネットワーク ゲームにおけるTCPとUDPの使い分け
PDF
PDF
例外設計における大罪
PDF
ゲーム開発者のための C++11/C++14
PDF
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
PDF
テスト文字列に「うんこ」と入れるな
PDF
C++ マルチスレッドプログラミング
PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
PDF
Where狙いのキー、order by狙いのキー
PDF
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
PPTX
DockerコンテナでGitを使う
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
PDF
オンラインゲームの仕組みと工夫
PPTX
分散システムについて語らせてくれ
PPTX
本当は恐ろしい分散システムの話
【Unite Tokyo 2019】Understanding C# Struct All Things
きつねさんでもわかるLlvm読書会 第2回
こわくない Git
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
SAT/SMTソルバの仕組み
ネットワーク ゲームにおけるTCPとUDPの使い分け
例外設計における大罪
ゲーム開発者のための C++11/C++14
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
テスト文字列に「うんこ」と入れるな
C++ マルチスレッドプログラミング
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Where狙いのキー、order by狙いのキー
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
DockerコンテナでGitを使う
コンテナの作り方「Dockerは裏方で何をしているのか?」
オンラインゲームの仕組みと工夫
分散システムについて語らせてくれ
本当は恐ろしい分散システムの話

Similar to イベント駆動プログラミングとI/O多重化

PDF
Node.js入門
PDF
Kyoto Tycoon Guide in Japanese
PPTX
Elixir入門「第2回:PC間で通信するアプリをサクっと書いてみる」
PPTX
CQRS+ESをAkka Persistenceを使って実装してみる。
PPTX
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
PDF
入門core.async
 
PDF
Em synchrony について
KEY
Perl 非同期プログラミング
PPTX
たのしいNode.js
PDF
[Basic 8] プロセスとスレッド / 入出力 / シェル
PPT
20060520.tcp
PPTX
Async Programming on Ruby
PPT
Node.js で Web アプリ開発
PPTX
Reactive Programming
PDF
Bossan dentoo
 
PDF
18166746-NeverBlock-RubyKaigi2009
PDF
Erlangやってみた
PPT
第2回 分散システム本読書会
PPT
V6prog OSC2013Hokkaido
PPTX
Elixir入門「第5回:Visualixirで見るマルチプロセス」
Node.js入門
Kyoto Tycoon Guide in Japanese
Elixir入門「第2回:PC間で通信するアプリをサクっと書いてみる」
CQRS+ESをAkka Persistenceを使って実装してみる。
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
入門core.async
 
Em synchrony について
Perl 非同期プログラミング
たのしいNode.js
[Basic 8] プロセスとスレッド / 入出力 / シェル
20060520.tcp
Async Programming on Ruby
Node.js で Web アプリ開発
Reactive Programming
Bossan dentoo
 
18166746-NeverBlock-RubyKaigi2009
Erlangやってみた
第2回 分散システム本読書会
V6prog OSC2013Hokkaido
Elixir入門「第5回:Visualixirで見るマルチプロセス」

More from Gosuke Miyashita

PPTX
Serverspec at hbstudy #45
PPTX
10分でわかるDevOps
PPT
Danga::Socketの非同期処理の仕組みとPerlbalで非同期処理するプラグインを書く方法
PPTX
Ia型超新星とチャンドラセカール限界
PPTX
Open Source System Administration Framework - Func
PPT
Assurer - a pluggable server testing/monitoring framework
PPT
How Danga::Socket handles asynchronous processing and how to write asynchrono...
PPTX
Inside Sqale's Backend at RubyConf Taiwan 2012
PPTX
Maglica - A Simple Internal Cloud Tool at #techkayac
PDF
Walter ファミリーの紹介 at Shibuya.go#1
PPTX
Inside Sqale's Backend at YAPC::Asia Tokyo 2012
PPTX
Puppetのススメ
PPTX
Inside Sqale's Backend at Sapporo Ruby Kaigi 2012
PPT
Puppet Best Practices? at COOKPAD
PPTX
Serverspec at July Tech Festa 2013
PPTX
DevOps とは何か 何であるべきか
PPTX
How Perl Changed My Life
PDF
Serverspec at Testing Framework Meeting
PPTX
DevOpsって何?
PPTX
NoSQLに関するまとめ
Serverspec at hbstudy #45
10分でわかるDevOps
Danga::Socketの非同期処理の仕組みとPerlbalで非同期処理するプラグインを書く方法
Ia型超新星とチャンドラセカール限界
Open Source System Administration Framework - Func
Assurer - a pluggable server testing/monitoring framework
How Danga::Socket handles asynchronous processing and how to write asynchrono...
Inside Sqale's Backend at RubyConf Taiwan 2012
Maglica - A Simple Internal Cloud Tool at #techkayac
Walter ファミリーの紹介 at Shibuya.go#1
Inside Sqale's Backend at YAPC::Asia Tokyo 2012
Puppetのススメ
Inside Sqale's Backend at Sapporo Ruby Kaigi 2012
Puppet Best Practices? at COOKPAD
Serverspec at July Tech Festa 2013
DevOps とは何か 何であるべきか
How Perl Changed My Life
Serverspec at Testing Framework Meeting
DevOpsって何?
NoSQLに関するまとめ

イベント駆動プログラミングとI/O多重化


[8]ページ先頭

©2009-2025 Movatter.jp