SMP:Symmetrical Multi Processor 对称多处理器
[color=blue]原理[/color]
[color=blue]1:disable SMP[/color]
[color=red]一个调度器对应一个运行队列[/color]
没有SMP支持的erlang VM 只有一个Scheduler运行于主线程,Scheduler从运行队列中取出需要运行的erlang进程和IO任务
[img]http://dl2.iteye.com/upload/attachment/0107/6867/f6a1f5ce-7621-3ec0-9be8-6c3e2018f807.png[/img]
[color=blue]2:enable SMP[/color] =
[color=red]多个调度器对应一个运行队列:这时会比上面慢,因为锁保护[/color]
有SMP支持的erlang VM 可以有1-1024个Scheduler,每个Scheduler运行于一个独立的操作系统线程,操作系统决定它是否要在不同的核上面运行。由于多个Scheduler从同一个公共运行队列中去除需要运行的erlang进程和IO任务,所以对共享数据进行锁保护
[img]http://dl2.iteye.com/upload/attachment/0107/6871/923f706c-9016-336b-b83b-bd08413f5789.png[/img]
[color=red]N个调度器,N个运行队列。每个调度器对应一个运行队列[/color]
[img]http://dl2.iteye.com/upload/attachment/0119/1398/88846a91-c292-37ab-9d7d-8fc09b4ebe9d.png[/img]
[color=blue]运行[/color]
从OTP R12B开始只要操作系统告知当前是多CPU(多核),SMP就会自动开启并设定Scheduler个数和CPU或核的数量一致:
[img]http://dl2.iteye.com/upload/attachment/0107/6873/e3d1c92f-3b58-3331-beda-7390d3674c16.png[/img]
开启和关闭SMP
启动erl时设置Scheduler数量
[color=blue]原理[/color]
[color=blue]1:disable SMP[/color]
[color=red]一个调度器对应一个运行队列[/color]
没有SMP支持的erlang VM 只有一个Scheduler运行于主线程,Scheduler从运行队列中取出需要运行的erlang进程和IO任务
[img]http://dl2.iteye.com/upload/attachment/0107/6867/f6a1f5ce-7621-3ec0-9be8-6c3e2018f807.png[/img]
[color=blue]2:enable SMP[/color] =
[color=red]多个调度器对应一个运行队列:这时会比上面慢,因为锁保护[/color]
有SMP支持的erlang VM 可以有1-1024个Scheduler,每个Scheduler运行于一个独立的操作系统线程,操作系统决定它是否要在不同的核上面运行。由于多个Scheduler从同一个公共运行队列中去除需要运行的erlang进程和IO任务,所以对共享数据进行锁保护
[img]http://dl2.iteye.com/upload/attachment/0107/6871/923f706c-9016-336b-b83b-bd08413f5789.png[/img]
[color=red]N个调度器,N个运行队列。每个调度器对应一个运行队列[/color]
[img]http://dl2.iteye.com/upload/attachment/0119/1398/88846a91-c292-37ab-9d7d-8fc09b4ebe9d.png[/img]
[color=blue]运行[/color]
从OTP R12B开始只要操作系统告知当前是多CPU(多核),SMP就会自动开启并设定Scheduler个数和CPU或核的数量一致:
[img]http://dl2.iteye.com/upload/attachment/0107/6873/e3d1c92f-3b58-3331-beda-7390d3674c16.png[/img]
开启和关闭SMP
erl -smp [auto|disable|enable]启动erl时设置Scheduler数量
erl +S 2:2
本文介绍了Erlang对SMP(对称多处理器)的支持,包括无SMP时只有一个调度器的情况,启用SMP后多个调度器共享运行队列导致的锁保护机制,以及N个调度器对应N个运行队列的优化方案。从OTP R12B版本起,Erlang会自动根据操作系统配置开启SMP,并调整调度器数量。
2549

被折叠的 条评论
为什么被折叠?



