Erlang进程非常轻量级
进程间通过消息传递进行通讯
进程接收消息时无法判断消息是共享的还是物理上复制过来的,这取决于Erlang运行时系统
每个进程都有一个邮箱,或者说是消息队列,队列中包含所有发给该进程的消息的指针
消息本身是一个term,存储在堆上
进程调用receive语句时会扫描邮箱直到找到第一个匹配的消息
发送消息时接收者由进程id来指定,而不管进程位于何处
Erlang/OTP的三种运行时系统
Erlang/OTP的运行时系统基于process-centric架构,其中每个进程分配和管理自己的私有内存区域,这样做的优势是gc的latency很低
另外Erlang/OTP还带有两种运行时系统:communal和hybrid
communal中所有进程共享堆,hybrid则是每个进程对于自己的数据有自己的堆,而进程间的消息则存放在共享的堆上
Process-centric的优点是gc的latency低,缺点是进程间通讯要复制消息
Communal的优点是进程间通讯快,而gc 的latency大
Hybrid则恰好中合了这两者的优点
Hybrid是最佳实践,性能比其他两者都好,并且支持大量线程伸缩性实现
Symmetric multiprocessing
erlang的beam模拟器
1,beam process-centric,默认的
2,beam.smp communal,共享内存
3,beam.hybrid hybrid,混合型
Actors vs. Erlang中说到:
引用
Actually Erlang has 3 memory models: private heap, shared and hybrid (which is somewhat in between). As far as I remember this feature is still experimental so I did not found any info about this in Erlang docs. I think hybrid architecture was switched on with "-hybrid" flag passed to erl. Shared heap was found to be not so good but hybrid architecture performs better on most of Erlang applictions.
很长一段时间里Erlang/OTP都是默认使用process-centric运行时系统,使用private heap,完全无共享内存
自从OTP R12B开始,如果OS发现有多个核,SMP会自动打开,利用多核优势,见
关于SMP Erlang的一些事实
这样的话,以后Erlang就会默认搞成使用SMP架构,共享内存,给内存加锁来实现隔离,充分利用多核优势
这样看来Erlang标榜的“无共享内存,纯净的消息传递”架构已经被取缔了,但是从上层进程间通讯调用模式来看还是消息传递模式,只不过底层实现改了而已
然而我们使用启动参数还是可以使用process-centric或hybrid模式的,具体内存优化看应用场景而定了
分享到:
相关推荐
erlang内存管理
erlang整理的一些心得和lunix查看cpu和内存信息的方法
Erlang核心开发者Lukas Larsson在2014年3月份Erlang Factory上的一个演讲详细介绍了Erlang内存体系的原理以及调优案例 根据siyao zheng博客上听写的资源进行的翻译,大致只翻译了80%但核心部分已经完整,希望对大家...
java php python erlang 千万级内存数据性能比较,
erlang 程序设计一书的笔记,帮你快速重温erlang的知识点。
主要介绍了Erlang项目内存泄漏分析方法,本文讲解了分析方法、分析流程并找到问题原因和解决方法,需要的朋友可以参考下
rabbitmq和erlang,rabbitmq和erlang,rabbitmq和erlang,rabbitmq和erlang,rabbitmq和erlang,rabbitmq和erlang,rabbitmq和erlang,rabbitmq和erlang,rabbitmq和erlang
erlang的timer和实现机制 Erlang程序设计
ErlangB和ErlangC计算工具(exe可执行文件+excel两个) ErlangB和ErlangC计算工具(exe可执行文件+excel两个)
erlang入门电子书 erlang编程 Introducing Erlang,作者Simon.St.Laurent
rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统。它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rabbit MQ 是建立在Erlang OTP平台上。
erlang 安装包
Erlang的高级特性和应用Erlang的高级特性和应用
3. erlang要以管理员身份安装运行,并设置ERLANG_HOME环境变量。以及在path中设置ERLANG_HOME的bin目录 4. erlang安装后要检查能否编译成功一个helloworld文件。 5. rabbitMQ无法安装插件时非常有可能是erlang出问题...
Erlang及其应用Erlang及其应用Erlang及其应用
安装Erlang和RabbitMQ,linux系统下的哦,有红色字体标注!已踩坑
erlang编程指南学习笔记,包含具体操作命令例子
Director:灵活,快速和强大的Erlang流程管理库
erlang25.0 windows版本