人生ずっと勉強。
ITを軸としたT型人間になりたい人のブログ。
09 | 2017/10 | 11
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【I/O戦略】ネットワークプログラミングにおけるマルチスレッド+イベント駆動モデルの個人的メモ
WEB+DB PRESS vol.55の
「モダンネットワークプログラミング」
で紹介されてた、「マルチスレッド+イベント駆動モデル」のソースコードを
ごりごり写しながらようやく理解したことを忘れないようにメモ。
完全に個人用ですが。
マルチスレッド+イベント駆動モデル

めっちゃ簡単に書くと

・mainが初期ソケットとスレッド作成!
・スレッドたちは最初にacceptイベントハンドラを持って待機!
・クライアントから最初の接続きたらacceptイベントハンドラ起動!
・2回目以降はacceptイベントハンドラが設定したイベントハンドラ起動!

こんな感じか。

・まず上図のように、イベントループをまわすスレッドと、
最初にクライアントを受け付ける初期ソケットをmainで作成。
・各スレッドでそれぞれ、epollセットとイベントハンドラをつめこんだ
構造体を格納するための配列を用意(緑の枠内)。
そしてepollセットのファイルディスクリプタ(以下、fd)、
配列への参照も持つ(青の枠内)。
・どのスレッドも、クライアントから最初に接続があったときに
対応して実行するイベントハンドラを最初に持つ
(図だと、「2, cb{.,.,.,.}」とあるやつ)。
これをacceptイベントハンドラと呼ぶ(みたい)。
acceptイベントハンドラは、新しくクライアントが接続してくる度に
acceptして、新たに作られたソケットと、イベントハンドラ
(WEB+DBの例だとechoイベントハンドラ)を結び付けてcallback配列に
登録する役目を担うもの。
逆に言うと、こいつの仕事は、
新しくクライアントが接続してきたときだけ必要。
・各スレッドそれぞれイベントループ(という名のwhileループ)を
実行し、その中でepoll_waitを呼び出し。
イベントが発生したソケットのfdが返ってくるのを待つ。
・初期ソケットのfdであれば、最初に登録しacceptイベントハンドラが
実行され、ソケットをaccept、新たなソケットを作成して、
イベントを登録する(この例だとechoイベントハンドラ)。
図の上部でいうと、acceptによってfdが5のソケットが作成されて、
今後fdが5のソケットにイベントが発生したら、
「5, cb{.,.,.,.}」のイベントハンドラ(echoイベントハンドラ)が
実行されるようになる。
・初期ソケット以外のfdなら、対応するfdと結び付けられた
コールバック内容が実行される。


たぶんこの理解であってると思う。
説明わかりづらいな。

スポンサーサイト


わたくし

いろいろリンク

カテゴリ

月別アーカイブ

最新記事

最新コメント

最新トラックバック

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

ブロとも申請フォーム

この人とブロともになる

QRコード

QR

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。