`
spartan1
  • 浏览: 365245 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

supervisor与gen_server使用小结

 
阅读更多

supervisor与gen_server是OTP标准库中提供的两种behavior,其中gen_server是基础的公共服务器框架,supervisor本身就是一个gen_server behavior的实例。

 

supervisor behavior是建立监控树的基础,只有一个回调函数init(Arg),返回该监控进程的监控规格,其中包括了被监控子进程的重启模式,以及所有被监控子进程的规格。这个规格比较难记,多写几遍也就记住了。

 

这里主要说明几点:

1. 子进程规格中,包含了MFA指定的子进程启动函数。这里的A必须是一个列表,F有几个参数,A列表中就要有几个元素,F没有参数时要写一个空列表[]。这与supervisor:start_link和gen_server:start_link中的Module、Argument参数不同,后两个Argument是传给init回调函数的参数,而init回调只有一个参数,所以argment没有必要时一个列表。

 

2. 子进程规格中的MFA启动函数必须启动一个子进程,并且必须将该子进程与supervisor进程连接,可以使用gen_server、supervisor的start_link,或者直接使用spawn_link,或者先创建,再link。supervisor进程中不会自动将子进程与自己连接起来,不知OTP为什么要这么设计。这个事实耗费了我两天时间才在同事提醒下发现,满脸泪水。。。

 

3. 子进程规格中的MFA正常情况下必须返回{ok, Pid}或{ok, Pid, Extra},否则supervisor也会报错,所以最好的办法就是使用gen_server:start_link, supervisor:start_link, spawn_link作为MFA的最后一条指令。

 

OTP中有些比较不易理解的地方,不容易找到为什么这样设计。


分享到:
评论

相关推荐

    supervisor_install_pack.tar.gz

    Supervisor的各种安装方式都需要在线联网。但大部分的生产环境都是离线环境,是封闭的网络没有办法在线安装。这里整理了Supervisor的离线安装包和安装脚本,可以进行离线安装并能指定安装目录。 Supervisor离线...

    PyPI 官网下载 | supervisor_plus_cron-1.0.15201-py2.7.egg

    《PyPI与supervisor_plus_cron:Python库的管理和调度》 PyPI(Python Package Index)是Python开发者的重要资源库,它提供了大量的第三方Python库,方便开发者下载和安装。PyPI上的每个包都有一个唯一的标识符,即...

    PyPI 官网下载 | supervisor_logging_gelf-0.0.1-py2-none-any.whl

    标题中的"PyPI 官网下载 | supervisor_logging_gelf-0.0.1-py2-none-any.whl"指的是Python的包管理平台PyPI(Python Package Index)上发布的名为`supervisor_logging_gelf`的软件包的一个版本,具体版本号为0.0.1。...

    erlang tcp_server

    4. **gen_tcp模块**:这个模块提供了处理TCP连接的函数,如`gen_tcp:connect/3`用于建立客户端连接,`gen_tcp:recv/2,3`用于接收数据,`gen_tcp:send/2`用于发送数据,以及`gen_tcp:close/1`用于关闭连接。...

    Erlang_OTP_设计原理(含目录).pdf

    行为(Behavior)是一组预定义的模式,用于实现常见类型的进程,如服务器进程(Gen_Server)、有限状态机(Gen_Fsm)、事件处理器(Gen_Event)和监督进程(Supervisor)。这些行为模式通过行为模块和回调模块的分离...

    GDE-sempjofn-supervisor.zip_GDE

    学习matlab中的simulink的ppt,现在本人见过的最好的ppt,

    OTP Design Principles

    - **异步请求-Cast**:如果不需要等待服务器的响应,可以使用`gen_server:cast/2`发送异步请求。 - **停止**:可以使用`gen_server:stop/1`来终止一个GenServer进程。 - **处理其他消息**:除了处理请求外,...

    supervisor在linux环境下的离线安装包

    `Supervisor` 是一个在 Linux 系统中广泛使用的进程管理工具,它允许你通过一个简单的命令行界面或网络接口来启动、停止、监控和控制后台进程。在没有网络连接的环境中,离线安装 `Supervisor` 变得尤为重要。这个...

    supervisor_twiddler:操作 Supervisor 的运行时配置和状态

    supervisor_twiddler 该软件包是的RPC扩展,它允许以运行时通常无法实现的方式来操纵Supervisor的配置和状态。 安装 supervisor_twiddler 包上。 您可以从那里下载它们,也可以使用pip自动安装或升级: $ pip ...

    Erlang OTP设计原理文档 中文版本

    Gen_server提供了一种标准的接口来处理同步和异步请求,处理状态管理和错误处理。它们是构建复杂服务的基础,通常用于实现业务逻辑。 5. Gen_FSM(Finite State Machines): `gen_fsm.html`涵盖了生成有限状态机...

    supervisor_cache:直接在 Supervisor 实例中缓存任意数据

    您可以从那里下载它们,也可以使用pip自动安装或升级: $ pip install -U supervisor_cache安装软件包后,您必须修改您的supervisord.conf文件以注册 RPC 接口和supervisorctl插件: [rpcinterface:cache]...

    supervisor 安装与配置.zip

    **Supervisor:全面掌握在Ubuntu 16.04系统上的安装与配置** Supervisor是一款强大的进程管理工具,尤其适用于Python应用,它允许你管理和控制多个后台进程,确保它们持续运行且异常时能够自动重启。在Ubuntu 16.04...

    memory_supervisor_C.rar_memory

    在本文中,我们将深入探讨如何使用C++的MFC(Microsoft Foundation Classes)框架来创建一个内存监视器程序,这是基于给定的“memory_supervisor_C.rar_memory”压缩包中的资源。MFC是微软为Windows应用程序开发提供...

    erlang四大behaviour之四-supervisor

    ### Erlang Supervisor...#### 小结 Supervisor是Erlang并发编程中的重要组成部分,通过合理的配置可以大大提高系统的容错能力和稳定性。了解和掌握Supervisor的基本概念和使用方法对于构建可靠的分布式系统至关重要。

    使用Nginx_Supervisor_tornado搭建web服务.pdf

    本文将详细讨论如何使用Nginx、Supervisor以及Tornado框架来搭建一个高效的Web服务环境。 **2.1. Tornado** Tornado是一个异步网络库,最初由FriendFeed团队开发,后来被Facebook收购并开源。它主要设计用于处理高...

Global site tag (gtag.js) - Google Analytics