Erlang 20参考手册
指南:设计原则 | Guide: Design principles
包括应用 | 8. Included Applications
8.1介绍
应用程序可以包括其他申请。安包括申请有自己的应用程序目录和.app文件,但它是作为另一个应用程序的主管树的一部分启动的。
应用程序只能由另一个应用程序包含。
包含的应用程序可以包括其他应用程序。
任何其他应用程序不包含的应用程序称为初步应用...
图8.1:主要应用程序和包含的应用程序
应用程序控制器在加载主应用程序时自动加载任何包含的应用程序,但不会启动它们。相反,包含的应用程序的最高主管必须由包含应用程序中的主管启动。
这意味着在运行时,包含的应用程序实际上是主应用程序的一部分,而包含的应用程序中的进程认为自己属于主应用程序。
8.2指定包含的应用程序
属性定义要包含的应用程序。included_applications中的键.app档案:
{application, prim_app,
[{description, "Tree application"},
{vsn, "1"},
{modules, [prim_app_cb, prim_app_sup, prim_app_server]},
{registered, [prim_app_server]},
{included_applications, [incl_app]},
{applications, [kernel, stdlib, sasl]},
{mod, {prim_app_cb,[]}},
{env, [{file, "/usr/local/log"}]}
]}.
8.3启动过程同步
包含的应用程序的主管树作为包含应用程序的主管树的一部分启动。如果包含和包含的应用程序中的进程之间需要同步,则可以使用启动阶段...
启动阶段由.app文件中的键start_phases定义为元组列表{Phase,PhaseArgs},其中Phase是原子,PhaseArgs则是一个术语。
的值。mod必须将包含应用程序的键设置为{application_starter,[Module,StartArgs]},在哪里Module与往常一样,应用程序回调模块。StartArgs作为回调函数的参数提供的术语。Module:start/2*
{application, prim_app,
[{description, "Tree application"},
{vsn, "1"},
{modules, [prim_app_cb, prim_app_sup, prim_app_server]},
{registered, [prim_app_server]},
{included_applications, [incl_app]},
{start_phases, [{init,[]}, {go,[]}]},
{applications, [kernel, stdlib, sasl]},
{mod, {application_starter,[prim_app_cb,[]]}},
{env, [{file, "/usr/local/log"}]}
]}.
{application, incl_app,
[{description, "Included application"},
{vsn, "1"},
{modules, [incl_app_cb, incl_app_sup, incl_app_server]},
{registered, []},
{start_phases, [{go,[]}]},
{applications, [kernel, stdlib, sasl]},
{mod, {incl_app_cb,[]}}
]}.
当使用包含的应用程序启动主应用程序时,主应用程序将以正常方式启动,即:
- 应用程序控制器为应用程序创建应用程序主程序。
- 应用程序主调用
Module:start(normal, StartArgs)开始做最高主管。
然后,对于主应用程序和每个包含的应用程序按自顶向下、从左到右的顺序,应用程序主程序调用Module:start_phase(Phase, Type, PhaseArgs)对于为主应用程序定义的每个阶段,按该顺序排列。如果未为包含的应用程序定义阶段,则此阶段和应用程序不会调用该函数。
下列要求适用于.app包含的应用程序的文件:
- 大
{mod, {Module,StartArgs}}必须包括选项。此选项用于查找回调模块。Module申请。StartArgs被忽略,如Module:start/2只为主应用程序调用。
- 如果包含的应用程序本身包含包含的应用程序,则
{mod, {application_starter, [Module,StartArgs]}}必须包括选项。
- 大
{start_phases, [{Phase,PhaseArgs}]}选项,并且指定的阶段集必须是为主应用程序指定的阶段集的子集。
开始时prim_app如上所述,应用程序控制器在前面调用以下回调函数application:start(prim_app)返回一个值:
application:start(prim_app)
=> prim_app_cb:start(normal, [])
=> prim_app_cb:start_phase(init, normal, [])
=> prim_app_cb:start_phase(go, normal, [])
=> incl_app_cb:start_phase(go, normal, [])
ok
指南:设计原则 | Guide: Design principles相关
Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。
| 主页 | https://www.erlang.org/ |
| 源码 | https://github.com/erlang/otp |
| 版本 | 20 |
| 发布版本 | 20.1 |
加载中,请稍侯......