ニュートンの法則に従って空間を移動する一連の N 個の粒子の (同時) シミュレーターを構築しています。私の考えは、各粒子をタスクとしてモデル化することです。タスクは、他の粒子 (タスク) と相互作用して、その位置と質量を取得し、それが受ける正味の力を計算します。各粒子タスクは次のようなものです
while(true){
force = thisParticle.calculateNetForce(allTheParticles);
thisParticle.waitForAllTheParticlesToCalculateNetForce(); // synchronization
thisParticle.updatePosition(force);
thisParticle.waitForAllTheParticlesToUpdateTheirState(); // synchronization
}
多くのパーティクル (100 以上) を持つことができるので、そのような数の Java スレッド (物理スレッドにマップされる) を作成することはできません。私の考えはRuntime.getRuntime().availableProcessors()+1
、多くのタスクを実行できるスレッドを使用することです。
ただし、粒子タスクが終了しないため、FixedThreadExecutor を使用できません。内部で一種のスケジューリングも実行できる必要がある FixedThreadExecutor を使用したいと思います。この目的のために何か知っていますか?
または、並行性の観点からそのようなシステムをモデル化するためのより良いアプローチを提案してもらえますか (たとえば、別のタスクの分割)。
Ps: 私は「古典的な」同時実行メカニズムに限定されており、アクターや同様のアーキテクチャは含まれていません。