百万agent多agent系统在C+中的实现+; 我试图在C++中实现一个多代理系统。为了最大限度地增加每台电脑的代理数量,我考虑了以下高级设计:

百万agent多agent系统在C+中的实现+; 我试图在C++中实现一个多代理系统。为了最大限度地增加每台电脑的代理数量,我考虑了以下高级设计:,c++,multithreading,parallel-processing,multi-agent,C++,Multithreading,Parallel Processing,Multi Agent,每个代理都将表示为一个类的实例。(在多代理系统中,代理是一个独立/自治的实体) 每个实例化的代理将作为一个线程派生出来 如果操作系统(Windows或Linux)允许最多a个进程,并且每个进程允许最多生成B个线程,那么代理的总数将是a x B 代理将使用发布者/订阅者消息代理相互通信。计划使用RabbitMQ 为了使结果在统计上有效,要求有几百万个代理(例如,500万) 理想情况下,我希望每个代理都实现为一个进程,而不是一个线程。原因在于,避免了共享内存瓶颈和代理之间的相互依赖。例如,特定的线

每个代理都将表示为一个类的实例。(在多代理系统中,代理是一个独立/自治的实体)

  • 每个实例化的代理将作为一个线程派生出来

  • 如果操作系统(Windows或Linux)允许最多a个进程,并且每个进程允许最多生成B个线程,那么代理的总数将是a x B

  • 代理将使用发布者/订阅者消息代理相互通信。计划使用RabbitMQ

  • 为了使结果在统计上有效,要求有几百万个代理(例如,500万)

  • 理想情况下,我希望每个代理都实现为一个进程,而不是一个线程。原因在于,避免了共享内存瓶颈和代理之间的相互依赖。例如,特定的线程崩溃或进程崩溃可能导致整个线程池崩溃。表示为进程的代理不会有这样的限制

    然而,据我所知,操作系统中进程数量的上限是有限的(可能有几千个进程)?如果我的理解是正确的,数百万代理的需求将不会与仅流程策略一起工作

    问题:

    在PC服务器上(比如说,使用I7CPU)使用数百万个代理实现这样一个多代理系统,最好的策略是什么(如果有的话)。本质上,在不受共享内存和相互依赖约束的情况下,最大化每个CPU的代理数量的最佳实现策略是什么


    提前感谢。

    500万线程?你会死在操作系统调度程序中。使用线程池、事件和反应。代理对象或进程也是如此?如果使用线程实现,它们将是对象。不过,我希望使用流程来实现它们。但这意味着最多只有几千个代理,这(据我所知)是操作系统允许的进程数的上限?我可能错了,这些探员应该做什么?典型的设计是拥有一个可以通过id访问的代理集合(可能是映射?),以及一个读取队列并调用相关代理上的处理方法的事件调度器。这样,您就可以使用线程池,并且所需的线程数量仅限于当前处理请求的代理数量。这是简短的描述。如果不更好地了解这些代理在做什么,就很难给出更具体的建议。这将是一个通用的多代理系统,用于执行基于多代理的模拟场景(例如,病毒流感的传播、口碑广告、各种优化算法的试验等)。代理将是自主的,相互独立,并通过事件(RabbiMQ框架)相互通信。任何代理都不能调用其他代理的方法。在这种情况下,线程池似乎是可行的——尽管这意味着共享内存和代理依赖性的限制(如果一个代理崩溃,池中的其他代理也会崩溃)将继续存在。