流程层次结构和名称注册

时间:2013-09-23 10:30:02

标签: erlang

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

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

1 个答案:

答案 0 :(得分:3)

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

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

什么是最好的取决于您在分布式设置中达成共识的需要和/或路由查找所需的速度。此外,无论有没有,您都可以缓存路由查找。