2012-03-02 7 views
1

私はここで矛盾する意見を読んでいます。非同期メソッド呼び出しもスレッドプールによって処理されますが、IO呼び出しが保留されている間に基本オペレーティングシステムがこれらのスレッドを中断できるため、リソースを節約する可能性があります。非同期メソッド呼び出しを使用すると、.netスレッドでのパフォーマンスが向上しますか

+1

多くのスレッドでは、一定のコンテキスト切り替えが必要です。 – diolemo

+0

タイトルに「.net」などのプレフィックスを付けないでください。それがタグのためのものです。 –

+0

準備ができているスレッドがたくさんある場合は、コンテキストを一定に切り替える必要があります。 –

答えて

1

あなたは正しいです。 IOスレッドはサスペンドされるだけでなく、不要になったときにリタイアされます。しかし、非同期IOはすべての問題の一般的な解決策ではありません。理由は次のとおりです。

  • 非同期アルゴリズムはコーディングが難しいです。非同期コードは、同期バリアントより複雑でエラーが発生しやすい
  • IO完了コールバックは特別なIOスレッドで機能し、プログラマはこれらのスレッドを可能な限り自由に保つ必要があります。そうしないと、システムの速度が大幅に低下します。したがって、非同期IOに進むと、実際のデータ処理のためにプロデューサ/コンシューマパターンを実装する準備が整う
  • 150個未満の並列接続で要求があり、アプリケーションがPCマシン上で実行される場合、同期実装は、プログラムの容易さと満足のいくパフォーマンスを同時に実現する果物
+0

+1は非同期の短所です。 –

+0

非同期プログラミングは、上記のように慎重に行う必要があります。新しい5.0の機能により、非同期は非常に簡単になり、コーディングでは表現力豊かになります。私は何が起こっているのか理解するためにEric Lippertの記事を読むことをお勧めします:http://blogs.msdn.com/b/ericlippert/archive/2010/10/29/asynchronous-programming-in-c-5-0-part-two -whence-await.aspx彼はまた、非同期のいくつかの良い点を述べています。私はこれが未来だと知っていますが、このQ&Aに基づいて、それは役に立つかもしれません:) –

0

可能であれば、.net 4.0 System.Threading.Tasks.Parallelクラスを使用することをお勧めします。マルチコアプロセッサを利用します。

それは簡単です。

0

'非同期メソッド呼び出しも、スレッドプールによって処理されます。ユーザには見えません。はい、I/Oを実行する必要があります。

'I/Oが保留されている間にOSがユーザースレッドを中断できる間に、基礎となるオペレーティングシステムがこれらのスレッドを中断できるため、リソースを節約する可能性があります。

高性能のアプリケーションでは、より良いスレッド管理が可能なより多くの作業がカーネルにプッシュされるため、非同期で勝ちます。これはコンテキストスイッチを減らし、多くのデータコピーを回避します。

関連する問題