Joe Armstrong:
编程语言通常通过使用线程提供并发操作。由于线程使用缺乏原子性,因此需要锁定原语(如信号量或互斥量)。这可能会造成难以编程和调试的情况,例如死锁。
计算速度继续向摩尔定律的方向发展,并且考虑到编写当时利用处理器和体系结构的并发程序的复杂性,考虑以这种方式编写软件并不总是值得的。但有人猜测我们可能会开始看到潜在的物理限制:只有这么多的晶体管可以继续适应更小的物理区域。因此,并行化的使用变得越来越有吸引力。Amdahl定律基本上为程序的并行化提供了一个很好的经验法则:
在Erlang中创建一个进程,只需调用spawn
,它将返回一个进程ID。使用spawn/3
(spawn(Module, Function, Args) -> pid()
)
1 | -module(actor_file) |
在start/0
这里调用返回pid:
1 | 1> c(actor_file). |
它不是操作系统定义中的一个过程。这是一个Erlang进程,因此它在Erlang VM中运行。它在用户空间中运行,而不是绑定到内核,因此由Erlang Scheduler安排。
检查一下我们的进程使用了多少内存:
1 | 1> {_,Bytes} = process_info(actor_file:start(),memory). |
Erlang使用抢先式调度程序。抢占式调度程序通过运行任务,抢占,然后根据特定指标(例如优先级,时间或减少)恢复它们来工作。
Erlang的抢先式调度程序使用减少计数。减少通常是函数调用,垃圾收集,消息发送等.Erlang进程的减少计数是2000,这可以非常快。
此外,进程可以并且可以标记优先级:’max’,’high’,’normal’和’low’。
调度程序使Erlang成为低延迟,并行化程序的绝佳选择,因为它可以有效地管理多任务,因为它不允许任何一个进程独占资源。