Erlang的并发主要依赖于多进程来实现,相比C++中的进程,Erlang的进程属于编程语言而非操作系统,这意味着Erlang编写的多进程具有较好的移植性。
Erlang的核心架构是客户端-服务器:服务器与客户端指的是两种进程所扮演的角色(前者接受请求并回复,后者发送请求),是级别相同的两个进程。
对于顺序语言而言,在单一顺序进程中,进程崩溃和世界毁灭差不多,因此顺序语言会把重点放在故障预防之上,强调进行防御式编程。而对于Erlang而言,拥有大量的进程可供支配,单进程的故障不会有太大的影响,通常只需要编写少量的防御性代码,而把重点放在编写纠错性代码上。Erlang关于构建容错式软件的理念:“让其他进程修复错误”(安排进程间相互监督各自的健康状况)和“任其崩溃”(程序出错时让其立即崩溃)。
在如C语言等防御性编程中,错误检查代码与非错误检测代码需要交织一起编写,程序一边执行业务逻辑一边检测参数以避免崩溃。而Erlang中则是直接将程序构建成为两部分,一部分负责执行业务逻辑(仅加入少量防御性代码,假设所有的参数都是正确的不进行过多的检查),而另一部分负责在错误发生时纠错它们(比较通用,可以用在许多不同的应用程序里),这样错误检查代码和非错误检查代码有了明显的区分,两者不会交织在一起。