原理
1:disable SMP
一个调度器对应一个运行队列
没有SMP支持的erlang VM 只有一个Scheduler运行于主线程,Scheduler从运行队列中取出需要运行的erlang进程和IO任务
2:enable SMP =
多个调度器对应一个运行队列:这时会比上面慢,因为锁保护
有SMP支持的erlang VM 可以有1-1024个Scheduler,每个Scheduler运行于一个独立的操作系统线程,操作系统决定它是否要在不同的核上面运行。由于多个Scheduler从同一个公共运行队列中去除需要运行的erlang进程和IO任务,所以对共享数据进行锁保护
N个调度器,N个运行队列。每个调度器对应一个运行队列
运行
从OTP R12B开始只要操作系统告知当前是多CPU(多核),SMP就会自动开启并设定Scheduler个数和CPU或核的数量一致:
开启和关闭SMP
erl -smp [auto|disable|enable]
启动erl时设置Scheduler数量
erl +S 2:2