イベント駆動とノンブロッキング #hokkaidopm
Upcoming SlideShare
Loading in...5
×
 

イベント駆動とノンブロッキング #hokkaidopm

on

  • 2,898 views

2013/08/31 に行われた「Hokkaido.pm #10」 http://atnd.org/events/41429 で20分トークしたスライドです。

2013/08/31 に行われた「Hokkaido.pm #10」 http://atnd.org/events/41429 で20分トークしたスライドです。

Statistics

Views

Total Views
2,898
Views on SlideShare
2,073
Embed Views
825

Actions

Likes
4
Downloads
5
Comments
1

6 Embeds 825

http://hokkaido.pm.org 809
https://twitter.com 12
http://cloud.feedly.com 1
http://hokkaido.pm.org&_=1384128000007 HTTP 1
https://www.google.co.jp 1
http://www.perl-hokkaido.org 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

11 of 1

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • とてもわかりやすい。資料を見ているだけでOgataさんがどういう風に話しているのかイメージ出来る。

    しかし正直な所、イベント駆動がくるのは少し先なのか、もしくはエンジニアのエゴなのか、見極めが難しい所だと思っています。

    それを「どうコンテンツ・プロダクトにしていくか」が少なくとも今のところ僕の中にはない。

    しかしノンブロッキングで通信が出来るのは明らかに技術の進歩。
    もっともっと簡単に自然に出来るようになると利用される事も増えるのでは。と思ってます。
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    イベント駆動とノンブロッキング #hokkaidopm イベント駆動とノンブロッキング #hokkaidopm Presentation Transcript

    • イベント駆動と ノンブロッキング 尾形 鉄次 (OGATA Tetsuji) Twitter: @xtetsuji 2013/8/31 Hokkaido.pm #10
    • 自己紹介 • 尾形 鉄次 (OGATA Tetsuji) • Twitter: @xtetsuji • Blog: http://post.tetsuji.jp/ • Hokkaido.pm は #5から6回連続参加中 • 北海道とPerlが好きな、地元が北海道の人
    • 今回は私の勉強不足 とその 回の話です
    • 会社の部内勉強会で • 後輩と部内勉強会でAnyEvent::IRC::Client とTwiggyの勉強をしていたときの話 • ライブコーディングでAE::timerなどとも 連携してイベント駆動を実感 • 後輩「今つくっているIRCボットが時々 応答しなくなることがあるんです」
    • 勉強会中の模索 • 後輩「色々調べてはいるのですが…」 • 僕「何かがブロッキングしてる?」 • 後輩「ところでブロッキングとかノン ブロッキングとかイベント駆動とかっ て具体的に何なんでしょう?」
    • あ、知ったかぶり してて分からない…
    • こっそりググる
    • I/Oブロッキング • ブロッキングの代表例、I/O • ググって見ても出てくるのはこれ • 以前のYAPCでAnyEventが流行った時、 IO::Socket::INETを使っている事例系で 「それブロ(ry」と言われていたやつ
    • 先輩=私の回答 • 一つのプロセスがマルチタスクをして いるように見せかけるために、時間を 細かくスライスして、それ用にタスク を分割してやらせているんだよきっと • 「それ用」なのがノンブロッキング、 そうじゃないやつがブロッキング
    • 色々実験 • AE::timerのcbでsleep 10; とか書いてみる • IO::Socket::INETで待たされるコードを わざと書いてAnyEvent全体を止めてみる • 普通にIO::Handleで巨大ファイルを複数 開いて渾然一体と読めない事を確認
    • コードリーディング • 後輩「AnyEventのコード読めば分かる んじゃないですかね?」 • 僕「そうだね(うわ、マークレーマン 氏のコード、読むの大変そうだ)」 • でも読む
    • AnyEvent 読む • AnyEvent.pm から流し読みする • 僕「根底は while(1) じゃないかな」 • AnyEvent/Loop.pm に迷いこむ
    • AnyEvent::Loop 読む • なんとなく分かったこと • 最も解像度の高い場合でも1ミリ秒の 時間でスライスしている • I/Oや時間等のイベントを分割管理 •sub run { one_event while 1; }
    • AnyEvent::Loop 読む • 時間取得呼び出し(timesシステムコール) をなるべく抑えるっぽい絶妙な仕組み • 効率化なのか、すごいリファレンス • 慣れないと分からないビット演算 • 読んで理解すれば充実感にひたれる?
    • ここまでのまとめ • 「イベント駆動」は並列処理・マルチ タスクを実現するための手法の一つ • その他、「fork」や「スレッド」など • マルチCPUとかの知識は別として、OS レベルで何らかの並列処理はある
    • イベント駆動 ウェブサーバ
    • イベント駆動ウェブサーバ • 最近はイベント駆動ウェブサーバ全盛 • C10K問題への対処 • Nginx、Perl製各種ウェブサーバの登場 • prefork MPMが常識だったあのApacheも event MPMを2.4から正式リリース
    • Apache prefork MPMの 頭打ち問題
    • Nginx HttpPerlModule • 早くも現在最新バージョン1.4 • 0.8時代はEmbeddedPerlModuleと呼ばれ ていた • mod_perl1の書法の影響が見られる • 今の名前の通り、HTTPに特化したもの
    • Nginx HttpPerlModule
    • Nginx HttpPerlModule • Known Problemにイベント駆動ならでは の注意点が書いてあるけど問題点では ないと思う • ネットワークI/Oで止めないように気を つけるのは昨今の他のウェブサーバと 同様 → ジョブキューへ依頼!
    • Nginx HttpPerlModule • Nginx(0.8時代?)に本体にパッチをあてて PSGI対応するものはある • 簡単なPSGI実装であればHttpPerlModule でできるのでは → 探したけどなかった
    • Apache event MPM • 2.2でexperimental、2.4で正式版に • prefork MPMだと越えられないC10K問題 などの壁に立ち向かう、Nginxへの対抗 • ベンチマークを取った人の評判だと、 まだ期待したほどのパフォーマンスは 出ないらしい
    • Apache event MPM and mod_perl • 検討材料となりうる実績は無いはず • mod_perlがApache 2.4対応していない • 注意点はNginx HttpPerlModuleと同じか • これでConnectionフェーズを書いたらど うなるか興味深くはある
    • 宣伝: ModPerl::PSGI
    • ModPerl::PSGI • mod_perl2で書かれたのPSGI実装 • Plack::Handler::Apache2をベース • P::H::A2で対応していないprefork以外の MPMへの対応や、Perl本体とmod_perlの コア以外への依存をなくす等の意欲作
    • 宣伝: ModPerl::PSGI • Middleware等の資産活用のためにPlack 依存しないWAFではそのまま使える • MojoliciousではPSGI環境として使える • 実績が出たらP::H::A2へcontribute予定
    • workerモデル • preforkとスレッドやイベント駆動との ハイブリッドモデル • Nginxや最近のPerl製ウェブサーバでは このモデルを採用している • Twiggyやmorbo等は単一プロセスなので 少し注意しておくべき
    • ちゃんと理解したい • Linuxプログラミングインタフェースを 読まないといけないかもしれない • イベント駆動以前に、forkとかスレッド に関しても造詣を深めておきたい • 新たなイベント駆動サーバの時代に向 けて理解しなきゃいけませんね
    • まとめ • イベント駆動をちゃんと理解するのは 意外に難しいけど、楽しい • イベント駆動の考え方はウェブプログ ラマーに必須になっている(e.g.Ajax) • 続きはGitHubやブログ、YAPCで!
    • ご清聴 ありがとうございました