如何在 unetstack 中使数据结构全局化,以便多个代理可以更新该数据结构中的信息?
How to make data structure global in unetstack so that multiple agents can update information in that data structure?
目前我已经在其中一个代理中创建了包含邻居信息的二维数组。我希望这个数组是全局的,这样其他代理也可以访问这个数组并更新数组中的信息。请说明如何使数据结构或变量成为全局变量,以便其他代理也可以访问它。
在分布式系统中,理论上,代理可以 运行 在不同的容器甚至不同的机器上,因此共享数据结构或数组不是一个好主意。
话虽如此,如果您知道访问数据结构的代理保证 运行在同一个容器中,您可以在代理和 [=18= 之间共享对数据结构的引用] 来自不同代理的数据。通过在可以获取引用并将其传递给其他代理的地方提供 getters/setters,可以在构建代理时在堆栈设置期间共享引用。如果这样做,您还需要确保同步,因为每个代理 运行 都在自己的线程中,并且您可能会出现数据竞争。虽然这很容易做到,但我强烈建议不要使用这种方法。
更好的方法是在代理之间发送消息到 get/update 共享信息,或者将共享信息公开为代理参数。例如,NodeInfo
代理正是这样做的,它通过公开关于节点的常用信息(例如节点地址、节点位置、节点方向等)作为许多其他代理访问的参数和一些更新。
目前我已经在其中一个代理中创建了包含邻居信息的二维数组。我希望这个数组是全局的,这样其他代理也可以访问这个数组并更新数组中的信息。请说明如何使数据结构或变量成为全局变量,以便其他代理也可以访问它。
在分布式系统中,理论上,代理可以 运行 在不同的容器甚至不同的机器上,因此共享数据结构或数组不是一个好主意。
话虽如此,如果您知道访问数据结构的代理保证 运行在同一个容器中,您可以在代理和 [=18= 之间共享对数据结构的引用] 来自不同代理的数据。通过在可以获取引用并将其传递给其他代理的地方提供 getters/setters,可以在构建代理时在堆栈设置期间共享引用。如果这样做,您还需要确保同步,因为每个代理 运行 都在自己的线程中,并且您可能会出现数据竞争。虽然这很容易做到,但我强烈建议不要使用这种方法。
更好的方法是在代理之间发送消息到 get/update 共享信息,或者将共享信息公开为代理参数。例如,NodeInfo
代理正是这样做的,它通过公开关于节点的常用信息(例如节点地址、节点位置、节点方向等)作为许多其他代理访问的参数和一些更新。