2013-10-13 12 views
9

私は現在、多くの異なるWebサービスを利用してデータを取得するアプリケーションに取り組んでいます。私は各サービスをモジュール化してそこに依存関係を作りたいので(サービス1はサービス2と3の前に実行しなければなりません)、私はそれぞれのサービスを独自のタスクで実行しています。タスクの数が多すぎますか?

タスク自体が、彼らは、Webサービスへのリクエストを送っているし、応答を待っているか、モニターを経由して(応答待ちに

  • を処理している意味、積極的に実行しているいずれかの

    1. であり、タイムアウト) - タスクが完了すると、すべての待機中のタスクが起きて、依存関係が終了したかどうかを確認します。

    システムはrunniですパフォーマンスがかなり無視できるため、良いパフォーマンスと呼べるものがありますが、アプリケーションはかなりの数のタスクを生成します。

    私の質問によれば、このシナリオでは〜200件のタスクが多すぎますか?彼らは基本的にスレッド化されていないアプローチがより良くなるようにそれらのオーバーヘッドを生成しますか?

  • +0

    これはおそらく、(1)実行する必要のあるタスクと(2)モジュールの細かさに依存します。 –

    +0

    タスクはほとんどがウェブサービスに要求を送信するだけです。つまり、ごくわずかな処理(フィルタつぶやき)で、Twitterフィードのリクエストを送信することです。私は各項目に対して新しいタスクを開始します。つまり、約1〜30のタスクが「並行して」実行され、依存関係を待つことはありません---通常、Webサービスごとに1つのモジュール(現在は約10〜15モジュール)です。 – Scurals

    +0

    「実行中」とは、単にサーバの応答を待つことを意味するため、実行可能になります。 –

    答えて

    10

    一般的な回答は「測定、測定、測定」です。パフォーマンスに問題がない場合は、最適化を開始しないでください。

    私は200のタスクはうまくいっていると思います。スレッドと比較したタスクの美しさは、「実際の」スレッドやスレッドプールに比べてオーバーヘッドが少ないことです。 TaskSchedulerは、最小限のスレッド切り替えで、すべてのハードウェアスレッドが可能な限り活用されていることを確認しています。これは、子タスクを連続的に実行すること、他のスレッド上のキューから作業を盗むことなど、さまざまな方法で実行します。また、あなたは、いくつかの数字をしたい場合は、あなたが見ることができるように、この記事をチェックアウトTaskCreationOptions


    経由TaskSchedulerに特定のタスクを行うために何が起こっているかについていくつかのヒントを与えることができます

    、TPLはかなりありますオーバーヘッド
    http://www.palmmedia.de/Blog/2010/1/19/net-40-performance-of-task-parallel-library-tpl

    の面で安いこれは、件名に別の興味深い記事がある
    http://msdn.microsoft.com/en-us/magazine/cc163552.aspx

    +1

    「もう1つの興味深い記事」は死んでいます。 – Default

    関連する問題