Я пытаюсь реализовать многоагентную систему в C ++. Чтобы максимизировать количество агентов на ПК, я подумал о следующем дизайне высокого уровня:
Каждый агент будет представлен как экземпляр класса. (В многоагентной системе агент является независимой / автономной сущностью).
Каждый созданный агент будет порожден как поток.
Если ОС (Windows или Linux) допускает максимум процессов A, а каждый процесс позволяет порождать максимум потоков B, то общее число агентов будет A x B.
Агенты будут общаться друг с другом, используя посредник сообщений издателя / подписчика. Планируйте использовать RabbitMQ.
Чтобы результаты были статистически достоверными, необходимо иметь несколько миллионов агентов (например, 5 миллионов).
В идеале я хотел бы, чтобы каждый агент был реализован как один процесс, а не как один поток. Причины, избегая узкого места в общей памяти и взаимозависимости между агентами. Например. Конкретный сбой потока или сбой процесса может привести к сбою всего пула потоков с ним. Агент, представленный как процесс, не будет иметь таких ограничений.
Однако, насколько я понимаю, верхний предел количества процессов в ОС ограничен (возможно, несколько тысяч процессов)? Если мое понимание верно, требование нескольких миллионов агентов не будет работать со стратегией только для процесса.
Вопрос:
Какова была бы наилучшая из возможных стратегий (если вообще существовала) для реализации такой мультиагентной системы с многомиллионными агентами на сервере ПК (скажем, с процессором i7). По сути, какова будет лучшая стратегия реализации, которая максимизирует количество агентов на процессор без ограничений общей памяти и взаимозависимости?
Заранее спасибо.
Задача ещё не решена.