`
hideto
  • 浏览: 2682886 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Erlang内存管理和运行模式笔记

阅读更多
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模式的,具体内存优化看应用场景而定了
分享到:
评论
4 楼 mryufeng 2009-03-20  
Hybrid目前的open source未实现!
3 楼 stoneyzjw 2008-10-03  
你是德瑞克?
2 楼 hideto 2008-09-26  
communal和hybrid下都不会,现在r12b默认采用smp方式了,内存共享,消息不会被复制了
1 楼 cryolite 2008-09-25  
如果传递的消息里有一个很大的binary,比如64MB,是不是说在process-centric下每发这样一个消息都会复制一份binary;在communal不会有复制,hybrid呢,可能也不会。

相关推荐

    Erlang内存管理.pdf

    多块carrier的大小由Erlang运行时系统参数控制。 4. 分配器类型: Erlang提供了不同类型的分配器来管理不同类型的数据。这包括用于处理临时数据的分配器,如C函数作用域、临时GC根集、分布式消息解码、ets模式规格...

    Erlang虚拟机内存管理

    Erlang核心开发者Lukas Larsson在2014年3月份Erlang Factory上的一个演讲详细介绍了Erlang内存体系的原理以及调优案例 根据siyao zheng博客上听写的资源进行的翻译,大致只翻译了80%但核心部分已经完整,希望对大家...

    erlang整理的一些心得和lunix查看cpu和内存信息的方法

    6. **OTP(Open Telecom Platform)**:OTP 是一组设计原则、库和工具,为Erlang应用提供了标准框架,包括行为、设计模式和错误管理机制。 ### Linux 查看 CPU 和内存信息 1. **top 命令**:实时显示系统总体的CPU...

    java php python erlang 千万级内存数据性能比较

    Erlang的字典数据结构通常比其他语言的哈希表更快,因为它优化了并发访问和内存管理。 接下来是Java,它以其跨平台能力和丰富的库而闻名。"java_class_arr_data_test.jar"和"java_string_arr_data_test.jar"可能是...

    Erlang项目内存泄漏分析方法

    比如使用`erlang:memory()`命令可以看到Erlang emulator分配的内存情况,包括总的内存使用量、atom使用的内存和process消耗的内存等。 4. 检查进程创建数量:通过`erlang:system_info(process_count)`可以获取当前...

    erlang编程 Introducing Erlang

    它负责解释Erlang字节码,提供内存管理、垃圾回收和并发调度等功能。 ### 10. 语言特性 Erlang的语法简洁,支持模式匹配、函数式编程、列表处理和递归等特性。它的动态类型系统和强大的类型推断让代码更加灵活。 ...

    erlang 学习笔记1

    5. ** OTP(Open Telecom Platform)**:OTP是Erlang生态系统的核心,提供了一套用于构建可靠和可扩展系统的框架和库,包括Mnesia数据库、分布式服务和行为模式(如GenServer、GenEvent和Gen_fsm)。 6. **热代码...

    RabbitMQ3.9.13和ErLang24.2版本

    确保正确配置Erlang环境变量,以便RabbitMQ能正确识别和使用Erlang运行时系统。安装完成后,可以使用RabbitMQ的管理界面或命令行工具进行配置和管理,以满足特定的业务需求。 总的来说,RabbitMQ 3.9.13与Erlang ...

    erlang高级原理和应用PPT

    6. **BEAM虚拟机**:Erlang运行时系统BEAM的工作原理,垃圾回收机制,以及性能优化。 7. **标准库与第三方库**:Erlang的标准库介绍,如ETS(Erlang Term Storage)和Mnesia数据库,以及常用的第三方库如 Cowboy...

    erlang深度分析.pdf

    这涉及到监控ERTS的运行时参数,例如ETS(Erlang Term Storage)使用的内存、进程的数量和状态,以及SMP(对称多处理)支持程度等。 #### 3. 编码最佳实践 在Erlang开发中,最佳实践包括使用模式匹配、递归、消息...

    Erlang和RabbitMQ安装包

    5. **OTP(Open Telecom Platform)**:Erlang OTP是一套库和设计原则,提供了如行为模式(gen_server, gen_event等)、监控和分布式管理工具,简化了复杂系统的构建。 **RabbitMQ** RabbitMQ是基于AMQP(Advanced...

    erlang 笔记

    - **模式匹配与守卫表达式**: 使用模式匹配和守卫表达式来进行复杂的条件判断,例如: ```erlang get_length([]) -> 0; get_length([First|Rest]) -> 1 + get_length(Rest). ``` 此处定义了`get_length`函数,...

    erlang23.2版windows64位.zip

    7. **BEAM虚拟机**:Erlang运行在BEAM(Erlang虚拟机)上,BEAM为Erlang提供了高效的内存管理和垃圾回收。 8. **标准库**:OTP包含了大量的库和组件,如Mnesia(分布式数据库)、Riak(分布式键值存储)等,为...

    Erlang的高级特性和应用

    在Erlang中,程序结构由函数、模块和Beam文件组成,运行在Erlang虚拟机(VM)上。Erlang 的进程模型支持抢占式调度,通信机制基于消息传递,且有专门的监控和调试工具,如etop。 **Erlang 的系统组成** - 编译器:...

    图书:Erlang和OTP实战

    OTP是基于Erlang的一套设计原则和库,它提供了标准的组件和模式,如GenServer、GenEvent和Supervisor等,用于构建可靠的分布式系统。OTP的核心理念是模块化、可复用和容错性,通过这些组件,开发者可以快速构建出...

    erlang_版本24.3.4.4

    - **模式匹配**:Erlang的模式匹配功能允许在函数定义中使用模式来匹配和解构数据结构,简化了代码编写。 - **OTP(开放电信平台)**:Erlang OTP是一套库和设计原则,提供了构建可靠系统的框架,包括Mnesia数据库...

    erlang和rabbitmq.zip

    总的来说,"erlang和rabbitmq.zip" 提供了在Windows环境下搭建RabbitMQ服务器的基础,用户需要先安装Erlang OTP环境,然后才能安装和运行RabbitMQ。通过这两个工具,开发者可以构建高效、可靠的分布式系统,利用消息...

    Erlang深度分析

    ERTS是Erlang运行时系统,了解ERTS在运行期内存使用情况是优化Erlang应用的关键。这包括了解ETS(Erlang Term Storage)和Dets(Disk ETS)的使用,以及如何监控和调整内存分配。 ##### 3.2 Erlang中的调试工具 ...

    erlang25.0 windows版本

    - **行为模式**:如GenServer、GenEvent和Gen_fsm,它们定义了Erlang中服务器、事件处理和状态机的通用行为。 - **Elixir**:基于Erlang VM的现代编程语言,提供了更接近Ruby的语法,同时保留了Erlang的并发特性和...

    Erlang 环境 opt_win64_21.1版本

    OTP(Open Telephony Platform)是Erlang的开源开发框架,包含了Erlang虚拟机(BEAM)、库函数、编程模式和设计原则。otp_win64_21.1.exe是OTP在Windows 64位系统的特定版本,包含了运行Erlang应用程序所需的全部...

Global site tag (gtag.js) - Google Analytics