Erlang进程启动方式选择:Supervisor配置vs直接调用start_link?
Erlang中两种
start_link启动方式的选择指南 一、通过监督者(Supervisor)配置启动
- 本质是把进程纳入OTP监督树体系,监督者会持续监控这个子进程的状态。一旦进程异常崩溃,监督者会按照你配置的重启策略(
one_for_one、rest_for_one等)自动重启它,同时保证整个系统的启动、关闭流程是有序的。 - 适合场景:
- 系统核心服务进程:比如业务处理worker、数据库连接池、消息队列消费者这类需要长期稳定运行,崩溃后必须自动恢复的组件。
- 需要和应用生命周期绑定的进程:应用启动时自动拉起,应用停止时被监督者按顺序关闭,避免资源泄漏。
- 为什么选它:OTP监督树是Erlang容错能力的核心,把进程交给监督者管理,能避免单个进程故障引发整个系统雪崩,保障服务可用性。
二、在任意位置直接调用start_link
- 这种方式启动的进程会和调用它的进程建立链接(link):如果调用进程崩溃,新进程会被连带终止;如果新进程崩溃,调用进程要是没处理
EXIT信号,也会跟着崩溃。而且这个进程不在监督树管控范围内,崩溃后不会自动重启。 - 适合场景:
- 临时任务进程:比如一次性的文件解析、临时数据计算任务,完成后就退出,不需要长期存活,也没必要重启。
- 依附父进程的辅助进程:比如某个业务进程专属的临时日志收集、数据预处理进程,父进程退出时它也该跟着退出,不需要独立存活。
- 为什么选它:这种方式更轻量,不需要配置监督规则,适合生命周期短、依赖特定父进程的场景,避免过度设计。
核心判断标准
- 要是进程需要高可用、长期运行、故障自动恢复,必须走监督者配置启动。
- 要是进程是临时任务、依附其他进程、不需要自动重启,直接调用
start_link更高效。
内容的提问来源于stack exchange,提问作者envymike
相关产品推荐
相关产品推荐

