Twisted勉強中 パート1: さあ、はじめましょう
パート1: さあ、はじめましょう
http://skitazaki.appspot.com/translation/twisted-intro-ja/p01.html
同期モデル、スレッドモデルと比較しながらの非同期モデルについての説明。基本的なところから説明してくれるのはとても助かる。画像付きで分かりやすい。各モデルについてはドキュメントで説明されているので省略。
このパートで重要な個所は、非同期モデルが性能を発揮できる条件。
1.大量のタスクがあり、ほとんど常に少なくともひとつは進められるタスクがあるとき。
2.タスクが大量の入出力をさばき、他のタスクが実行できるかもしれないのに、同期プログラムがブロックして大量に時間を無駄にさせてしまうとき。
3.タスクがお互いに独立で、タスク間の通信がほとんど必要ないとき。(それゆえ、あるタスクが他のタスクを待つ必要がない)
要するに
各モデルの使いどころをしっかりと見極めること
が大切だってことかな。効率がいいからとなんでもスレッド、なんでも非同期はダメ。「金槌しかもっていないと、すべてのものが釘に見える」と言うしね。
処理モデルの使い分けについて
- 上記の条件の1番がNOである場合
- すべてのタスクが順序通りに実行されなければならない場合と考えられるので、同期モデルが適切。
- 1番がYESでも2番がNOの場合
- I/O処理ではなくCPU処理が重い場合と考えられる。この場合、CPUがシングルコアであれば同期モデル。マルチコアであればスレッドモデルが適切。
- 1番2番がYESでも、3番がNO
- つまりタスク間で協調が必要な場合と考えられる。この場合はスレッドモデルが適切。
- 全ての条件がYESの場合
- 非同期モデルが適切。
こんな感じだろうか。まだタスク間の協調っていうのが具体的にどんな処理に当たるのかはいまいち分かってないんだけど…。並列処理も要勉強。
ネットワークサーバーの実装は非同期モデルにとって最も当てはまりやすく、それゆえに Twisted は何と言ってもネットワークのためのライブラリなのです。
なるほど。
参考になった資料
第10回InfoTalkの開催報告
http://pk.aiit.ac.jp/index.php?InfoTalk%2F20090918%2FReport
アリエル・ネットワークの大谷さんが作った資料がとても分かりやすかった。パート1の範囲だと、10ページ目くらいまで読めばいいかも。動画もあるので後で見てみよう。
このInfoTalkっていうのは初めて知ったけど、他にも色々と面白そうな内容やってるので時間があったら他のも見ようかな。