进程层次结构和名称注册



假设,我有一只或多只机器海龟,每只机器海龟都有一个左轮和一个右轮,左右轮上都有一个编码器。车轮可能具有PID控制的电机。在像ROS这样的系统中,人们可以通过分层命名系统访问系统和子系统:即/turtle_1/lwheel/pid/kp来设置左轮PID控制器的Kp参数,或者/turtle_3/lwheel/encoder来获取车轮的编码器读数。 海龟将是局域网上的节点。

由于 Erlang 具有用于注册进程的平面命名空间,因此应该如何实现这样的分层视图? 我想可以为层次结构中的每个级别注册一个进程,其名称是子系统的完整限定名称,如 (/turtle_1 表示顶级进程,/turtle_1/lwheel 表示控制轮子的进程,/turtle_1/lwheel_1/pid 等。是否有使用全局模块维护分层视图的最佳实践?

解决此问题的最简单方法是引入路由进程或路由映射,它可以将层次结构绑定到Pid。您有以下几种选择:

  • gproc 提供了基于 ETS 的注册表表
  • 实现层次结构并最终在 LAN 上进行转发的进程
  • 全局 - 它采用任意术语作为名称,因此可以在命名空间中注册一个元组,这相当于具有树顺序命名空间。
  • 更新 ETS 表的过程,以便路由决策本身位于邮件发件人中。

最佳方法取决于您在分布式设置中达成共识的需求和/或路由查找所需的速度。此外,无论是否,您都可以缓存路由查找。

最新更新