Erlang/OTP

Erlang/OTP

面向高并发容错系统的编程语言

开发官网

应用介绍

写一个要同时扛住几十万连接、还不能停机维护的服务,用常规语言的做法是线程池加锁、加一层进程守护、再加一套热更新方案,每一层都是自己搭的。Erlang 把这些做进了语言和运行时:轻量进程配合「让它崩溃」的监督树——单个进程占用只有几百字节,崩了由上层监督者按策略重启,不会拖垮整个系统,代码还能在不停服的情况下热替换。

它出自爱立信的电话交换机项目,天生冲着「长年不停机」这个目标设计。语言本身是函数式的、变量不可变,进程之间不共享内存、只靠消息传递,所以多核扩展不需要你手动处理锁和竞态。分布式也是内建的:同一套代码跑在多台机器上,进程之间互发消息的写法和单机没区别。

OTP 是随语言一起发行的那套标准框架和库——gen_server、supervisor 这些行为模式把常见的服务骨架固化下来,实践中说 Erlang 基本都是指 Erlang/OTP 这一整套。RabbitMQ、CouchDB、ejabberd 都建立在它上面,Elixir 也跑在同一个虚拟机上。Apache 2.0 开源,Windows、Linux、macOS 都有。

软件功能



轻量进程:进程由虚拟机自己调度,创建开销只有几百字节,一台机器同时跑几十万个不成问题,和操作系统线程完全不是一个量级。

监督树与容错:supervisor 按配置的重启策略照看子进程,某个进程异常退出就按策略拉起来,「让它崩溃」是被鼓励的写法而不是事故。

热代码升级:运行中的系统可以替换模块代码,老连接继续用旧版本、新请求走新版本,不用停服务窗口。

消息传递并发:进程之间不共享内存,只通过异步消息通信,从根上避开了锁和数据竞争这类问题。

内建分布式:多个节点可以组成集群,跨机器发消息和本机发消息写法一致,分布式不是外挂的库而是语言的一部分。

OTP 框架:gen_server、gen_statem、supervisor 等行为模式把服务、状态机、监督这些骨架标准化,不用每个项目重新发明一遍。

交互式 shell:erl 提供交互式环境,可以直接求值、连上运行中的节点观察和调试,改代码验证的循环很短。

模式匹配与不可变数据:函数式语法、变量单次绑定、函数头直接做模式匹配,并发代码里的状态流向比较容易推理。

跨平台开源:Apache 2.0 协议,Windows 有安装包,Linux 和 macOS 可从源码或包管理器安装。

应用截图