JSR 352 - Java プラットフォームのバッチ アプリケーションは、パーティションを使用した並列処理機能を提供します。バッチ ランタイムは、進行を加速するために、異なるパーティションでステップを実行できます。JSR 352 では定義も導入されていthreads
ます。次のように、使用するスレッドの数を定義できます。
<step id="Step1">
<chunk .../>
<partition>
<plan partitions="3" threads="2"/>
</partition>
</chunk>
</step>
それから私は混乱します: 各スレッドが占有され、CPU バランスが確保されるように、適切なパーティション計画をどのように与えるのですか?
たとえば、To do テーブル A、B、C があり、それらの行はそれぞれ 10 億、100 万、1,000 です。このステップの目的は、これらのエンティティをドキュメントに処理することです。1 つのエンティティが 1 つのドキュメントに移動します。ドキュメント作成の順序は重要ではありません。これらのテーブルのエンティティの CPU 時間は、それぞれ 1 秒、2 秒、5 秒です。スレッド数は 4 です。
テーブル タイプごとに 1 つずつ、3 つのパーティションがある場合、次の1 * 10^9
理由により、手順が完了するまでに数秒かかります。
- パーティション Aは
1 * 10^9 * 1s = 1 * 10^9s
、スレッド 2 で実行されます - パーティション Bは
1 * 10^6 * 2s = 2 * 10^6s
、スレッド 3 で実行されます - パーティション Cは
1 * 10^3 * 5s = 5 * 10^3s
、スレッド 4 で実行されます
ただし、スレッド 2 が占有されている間、スレッド 3 は から解放され2 * 10^6s
、スレッド 4 は から解放され5 * 10^3s
ます。したがって、明らかに、これは適切な分割計画ではありません。
私の質問は次のとおりです。
- 上記の例で完成させるより良いパーティション計画はありますか?
- 私は考えることができます:パーティションは消費するキューであり、スレッドはこのキューを消費しますか?
- 一般的に、いくつのスレッドを使用できますか / 使用する必要がありますか? それはCPUコアの数と同じですか?
- 一般に、各スレッドが占有され、CPU バランスが確保されるように、適切なパーティション プランを設定するにはどうすればよいでしょうか。