Erlang内存管理和运行模式笔记
2012-09-23 21:05
141 查看
转载:/article/4478924.html
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运行时系统
每个进程都有一个邮箱,或者说是消息队列,队列中包含所有发给该进程的消息的指针
消息本身是一个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模式的,具体内存优化看应用场景而定了
相关文章推荐
- 学习笔记(二)——单用户模式、救援模式、运行级别、启动流程、登录文件
- Spark学习笔记(30)集群运行模式下的Spark Streaming调试
- OpenSceneGraph 笔记--窗体模式运行
- 在后台运行erlang;在需要时连回交互模式
- Libcurl笔记五_easy模式运行原理
- 学习笔记(二)——单用户模式、救援模式、运行级别、启动流程、登录文件
- 蜗龙徒行-Spark学习笔记【五】IDEA中集群运行模式的配置
- maven学习笔记:命令行模式创建java_spark项目并运行示例程序
- IA-32 Intel手册学习笔记(二)保护模式下的内存管理
- Spark笔记一之简介,启动,与Hadoop对比,运行模式
- maven学习笔记:命令行模式创建scala_spark项目并运行程序
- Spark2.x学习笔记:4、Spark程序架构与运行模式
- 设计模式笔记--建造者模式
- C#设计模式(学习笔记[01])
- WRF模式运行的流程以及简单错误的避免
- 网络管理模式笔记
- Android(java)学习笔记152:Android运行时异常“Binary XML file line # : Error inflating class”
- Microsoft .NET 的企业解决方案模式 > Web 表示模式(学习笔记三)
- 设计模式笔记 8.Composite 组合模式(结构型模式)
- 咕泡-委派 delegate 设计模式笔记