C++ でマルチエージェント システムを実装しようとしています。PC あたりのエージェント数を最大化するために、次の高レベルの設計を考えました。
各エージェントは、クラスのインスタンスとして表されます。(マルチエージェント システムでは、エージェントは独立/自律エンティティです)。
インスタンス化された各エージェントは、スレッドとして生成されます。
OS (Windows または Linux) が最大 A プロセスを許可し、各プロセスが最大 B スレッドの生成を許可する場合、エージェントの総数は A x B になります。
エージェントは、パブリッシャー/サブスクライバー メッセージ ブローカーを使用して相互に通信します。RabbitMQ の使用を計画します。
結果が統計的に有効であるためには、エージェント数が数百万 (たとえば 500 万) である必要があります。
理想的には、各エージェントを 1 つのスレッドではなく、1 つのプロセスとして実装したいと考えています。理由は、共有メモリのボトルネックとエージェント間の相互依存を回避することです。たとえば、特定のスレッド クラッシュまたはプロセス クラッシュによって、スレッド プール全体がクラッシュする可能性があります。プロセスとして表されるエージェントには、そのような制限はありません。
とはいえ、OSのプロセス数の上限は限られている(もしかしたら数千プロセス)ということでしょうか。私の理解が正しければ、数百万のエージェントの要件は、プロセスのみの戦略では機能しません。
質問:
PC サーバー (i7 CPU など) に数百万のエージェントを持つマルチエージェント システムを実装するための最善の戦略は (仮にあったとしても) 何でしょうか。基本的に、共有メモリと相互依存の制約なしで、CPU あたりのエージェント数を最大化する最適な実装戦略は何でしょうか?
前もって感謝します。