2011-12-18 16 views
0

私は非常に多くの場合、独立して実行したい小さなオペレーションが多数あります。これらの場合、操作の数は各操作に要する実際の時間に比べて非常に大きいので、GCDのオーバーヘッドは通常は低いにもかかわらずオーバーヘッドのために各操作のタスクを作成するのは不適切です。GCDなどで適切な数のタスクを決定するにはどうすればよいですか?

なので、操作の数を各チャンクで動作する素敵なチャンクに分割してください。しかし、どのようにしてタスク/チャンクの適切な数を決定できますか?

答えて

0

テストとプロファイリング。何が意味を成しているのか、また、うまくいくのはアプリケーション固有のものです。

基本的には二つのことを決定する必要があります:彼らは2で

プレイ上で動作しますチャンクの

  • サイズを生成する

    1. ワーカープロセス/スレッドの数をそのスループットを計算します(1秒あたりに完了したタスク数*ワーカー数)。どこかで、速度、従業員数、およびチャンク内のタスク数の間に良好な均衡が見いだされます。

      これらの2つの変数を調整しながら、作業者に一連のテストデータ(基本的にはベンチマーク)を与え、スループットを自動的に測定することで、より簡単なバランスを見つけることができます。作業者サイズ/タスクチャンクサイズの組み合わせごとにスループットを記録し、最後に出力します。 最高のスループットが最良の組み合わせです。

      どのくらい特定のタスクが実際にタスク自体に依存かかる場合最後に、(例えば、いくつかのタスクがX時間がかかる、といくつかのX*3時間がかかる一方で、あなたはアプローチのカップルを取ることができます。の性質に応じて、

      • ベンチマークの履歴データ - 実際のワーカーのグリッドに入る作業の種類を表す実際のデータのフィード、および次のいずれかを試してみてください。そのサンプルデータを使用してスループットを測定する
      • wのスペクトルを横切るランダムサイズのタスクを生成するあなたが見ると思う帽子と、複数のサイズのタスクにまたがって平均的に最もよく働くような組み合わせを選ぶ
      • タスク内のデータを読むことができ、そのデータがあなたにそのタスクにはX時間、またはX*3(またはその間にあるもの)が必要です。タスク自体を処理する前にその情報を使用して、現在のワークロードに応じて最適なスループットを達成するようにワーカー/タスクのサイズを動的に調整できます。このアプローチは、より高い負荷を処理するために必要なときに余分なVMをスピンアップし、負荷が低下したときなどにVMを戻すAmazon EC2で行われます。

      あなたが選ぶものは何でも、どんな未知のスピードの問題は、ほとんどの場合、それが実行される速度は、アプリケーションの成功に不可欠である場合には、デモのベンチマークのいくつかの種類を必要とする(時々処理する時間が非常に小さいので、その必要がありますそれはごくわずかです)。

      幸運を祈る!

  • 関連する問題