2012-03-08 10 views
4

私はドキュメントを読んだ。私は例を挙げて遊んだ。しかし、私はそれが有用で正確な非同期手段が何であり、どこの人の魔法の多くがとても狂っているのか、まだ分かりません。誰かが5のように私にpython-twistedを説明できますか?

I/Oを待つのを避けるためだけの理由があるのは、スレッドで簡単に実行する理由です。 Deferredはなぜ必要なのですか?

私はコンピューティングに関するいくつかの基本的な知識が不足していると思います。もしそうなら、それは何ですか?

+1

スレッドを見るにはオーバーヘッドがあり、スレッドで待機していることはまだCPU /メモリーを要しました。プラスに同期の問題があります。 – Dikei

+2

[C10K](http://www.kegel.com/c10k.html)として知られているさまざまなI/O戦略の有名な説明と比較があります。 – bereal

+1

@Dikeiなぜ非同期の場合にこのオーバーヘッドが回避されるのですか?あなたはまだプログラムデータを待つ必要はありませんか? – Moonwalker

答えて

4

あなたは5つのように... ok:スレッドが悪い、非同期的に良い!

真剣に:スレッドは、インタプリタのロックと切り替え、メモリの消費とコードの複雑さの両方でオーバーヘッドを被ります。あなたのプログラムがIOバウンドで、他のサービス(API、データベース)が応答を返すのをたくさん待っていると、あなたは基本的にアイドル状態になり、リソースを無駄にしています。

async IOのポイントは、並行性を維持しながらスレッドのオーバーヘッドを軽減し、プログラムをシンプルに保ち、デッドロックを回避し、複雑さを軽減することです。

チャットサーバーについて考えてみましょう。サーバー上に何千もの接続があり、一部の人は、その部屋に基づいていくつかのメッセージを受信する必要があります。これをスレッドで行うことは、非同期の方法よりもはるかに複雑になります。

re referred - これは、すべての関数に待機中の操作が準備ができているときに戻るためのコールバックを与える代わりに、コードを単純化する単なる方法です。

もう少し簡単ですが、よりシンプルでエレガントな非同期IOフレームワークが必要な場合は、基本的には非同期Webサーバーで、非同期httpクライアントと遅延の代わりとなるtornadoを試してみてください。非常にうまく書かれており、汎用の非同期IOフレームワークとして使用できます。

http://tornadoweb.org

+1

竜巻には据え置き用の代替品がありません。それはすべてのコールサイトで手動コールバックを通過しています。それは* Deferred *が代わるものです。 –

+1

いいえ、竜巻はそれを可能にする新しいライブラリを持っています。 http://www.tornadoweb.org/documentation/gen.html –

+1

うわー... http://twistedmatrix.com/documents/current/api/twisted.internet.defer.html#inlineCallbacksのようなものですが、もっと悪い。 –

関連する問題