Erlang和SMP

本文介绍了Erlang对SMP(对称多处理器)的支持,包括无SMP时只有一个调度器的情况,启用SMP后多个调度器共享运行队列导致的锁保护机制,以及N个调度器对应N个运行队列的优化方案。从OTP R12B版本起,Erlang会自动根据操作系统配置开启SMP,并调整调度器数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 -smp [auto|disable|enable]

启动erl时设置Scheduler数量
erl +S 2:2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值