私のプロジェクトでは、クライアントから作業要求を受け取る Java 実行フレームワークを構築しています。作業 (さまざまなサイズ) は一連のタスクに分割され、処理のためにキューに入れられます。各タイプのタスクを処理する個別のキューがあり、各キューは ThreadPool に関連付けられています。ThreadPools は、エンジンの全体的なパフォーマンスが最適になるように構成されています。
この設計は、リクエストの負荷を効果的に分散するのに役立ち、大きなリクエストがシステム リソースを占有することはありません。ただし、一部のキューが空で、それぞれのスレッド プールがアイドル状態の場合、ソリューションが無効になることがあります。
これを改善するために、負荷の高いキューが他の ThreadPools から助けを得ることができるように、作業/タスクを盗む手法を実装することを考えていました。ただし、Java では複数のキューを ThreadPool に関連付けることができず、ワーク スティーリングの概念をサポートしていないため、独自の Executor を実装する必要がある場合があります。
Fork/Join について読んでください。しかし、それは私のニーズに合わないようです。このソリューションを構築するための提案や代替方法は非常に役立ちます。
ありがとうアンディ