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是最佳实践,性能比其他两者都好,并且支持大量线程伸缩性实现
[url=http://en.wikipedia.org/wiki/Symmetric_multiprocessing]Symmetric multiprocessing[/url]
[url=http://mryufeng.iteye.com/blog/106165]erlang的beam模拟器[/url]
1,beam process-centric,默认的
2,beam.smp communal,共享内存
3,beam.hybrid hybrid,混合型

[url=http://www.nabble.com/Actors-vs.-Erlang-td12946482.html]Actors vs. Erlang[/url]中说到:
[quote]
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.
[/quote]
很长一段时间里Erlang/OTP都是默认使用process-centric运行时系统,使用private heap,完全无共享内存
自从OTP R12B开始,如果OS发现有多个核,SMP会自动打开,利用多核优势,见[url=http://erlang-china.org/misc/some_facts_about_erlang-and-smp.html]关于SMP Erlang的一些事实[/url]
这样的话,以后Erlang就会默认搞成使用SMP架构,共享内存,给内存加锁来实现隔离,充分利用多核优势
这样看来Erlang标榜的“无共享内存,纯净的消息传递”架构已经被取缔了,但是从上层进程间通讯调用模式来看还是消息传递模式,只不过底层实现改了而已
然而我们使用启动参数还是可以使用process-centric或hybrid模式的,具体内存优化看应用场景而定了
Linux内核进程管理:SMP 周期性负载均衡:CPU对应的运行队列数据结构记录下一次周期性负载均衡时间,当超过这个时间点后,将触发SCHED_SOFIRQ软中断来进行负载均衡。在对称多处理器系统中,所有处理器的地位都是相同的,所有的资源,特别是存储器、中断及I/O空间,都具有相同的可访问性,消除结构上的障碍。周期性调用进程调度程序scheduler_tick()->trigger_load_balance()中,通过软中断触发负载均衡。进程A唤醒进程B时,try_to_wake_up()中会考虑进程B将在哪个CPU上运行; 阅读详情

相关推荐

Erlang虚拟机内存管理

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

Beam学习笔记

Beam学习笔记 编程指导 https://beam.apache.org/documentation/programming-guide/ 创建驱动程序,定义pipeline,包括输入、转换、输出,以及执行参数(主要包括runner,决定pipeline运行的后端) 创建pipeline,设置参数 创建初始的PCollection 对PCollection应用PTransform:可以对PCollection中每个元素进行修改、过滤、分组、分析等操作,输出新的PCollection;PTransfo

rainharder的专栏 2941

QMT实盘交易入门:5分钟搞定ETF全球配置策略(附完整代码)

本文详细介绍了如何使用QMT平台实现ETF全球配置策略,从环境准备到策略编写、实盘部署全流程仅需5分钟。通过xtquant库对接交易所接口,提供完整的动量轮动策略代码,帮助投资者快速掌握自动交易技术,优化全球资产配置。

weixin_30675247的博客 334

久不使用的rabbitmq突然占用很多CPU居高不下,这个进程beam.smp 一直在跑

清除了/var/lib/rabbitmq/mnesia/下面的旧数据就好了

qq_18630487的博客 9534

在LinuxMint 22.1(Ubuntu24.04)上安装使用同花顺远航版

Linux用户成功在LinuxMint22.1系统上通过Wine9.0运行同花顺远航版,解决了长期困扰的股票行情软件问题。此前Linux原生版同花顺功能简陋且停止更新,Wine版通达信存在显示问题。作者作为自由软件支持者,通过调整Wine配置文件解决了高分屏显示异常问题,实现了远航版的正常使用。期待同花顺能重启Linux原生版开发,支持更多处理器架构,完善国产软件生态。该方案为Linux股票软件用户提供了实用参考。

5133

FLUENT UDF编译及蒸发冷凝相关问题

蒸发冷凝与相间传质

weixin_48029137的博客 1万+

RabbitMQ及Erlang内存使用分析

一、RabbitMQ内存占用排查1.定位 linux 系统内存占用最高进程(1)输入 top 指令nqs@nqs-yq-haitao-order-1488355883912:~$ top然后输入大写的 M(Shift+m),基于内存占用倒序,找到占用最大内存的进程,如果内存占用最大的为 beam.smp 则为 RabbitMQ 进程占用。2.定位 RabbitMQ 内部组建内存占用情况(1)进入 R

jaredcoding的博客 1万+

【电路设计实战】BUCK降压电路:从原理到PCB布局的降噪与效率优化

本文深入剖析了BUCK降压电路的工作原理,并针对其固有的开关噪声问题,提供了从核心元件选型到PCB布局的全面优化方案。文章重点探讨了电感、电容等关键元件的选型要点,强调了低ESR电容和肖特基二极管的重要性,并详细阐述了如何通过最小化功率回路、保护敏感信号线等PCB布局实战技巧,有效抑制噪声、提升效率与稳定性。

weixin_29304021的博客 220

链接器与重定位深度剖析:从目标文件到可执行文件(基于 linux-insides-zh 杂项篇)

本篇技术指南围绕 [Misc/linux-misc-3.md](https://link.gitcode.com/i/6cb59bfcdf4f89be5e91f98747cd86e7) 展开,系统讲解**链接器(Linker)**的工作流程、**目标文件**的符号表与重定位机制,以及 **GNU ld** 的实用命令行选项与**链接器控制语言(链接器脚本)**。全文以经典的 `factorial`

gitblog_00942的博客 806

【算力网络】算力知识

尽管算力这个词在近年来很“火”,但其背后的含义,却很少有人真正了解

qq_42809645的博客 1万+

FPGA之串口收发字符串之(四)——串口屏USART_HMI介绍

之前对串口各模块的设计都做了相关介绍。这里介绍串口屏的相关知识。 本次项目使用的串口屏型号是陶晶驰串口屏TJC3224T024_011,这个型号的串口屏的资料在官网可以找到。本文抛转引玉,简单介绍以便在本工程中更好的应用。 下图是该串口屏的实物图: 一般地,使用单片机或者嵌入式MCU控制串口屏,都会用到串口,同样地,在FPGA中实现也是类似,不过稍微复杂,具体代码设计过程中有以下问题需要...

隔壁old余的博客 7494

LING高级特性详解:如何利用Xen虚拟化优化Erlang运行时性能

LING是一个创新的Erlang on Xen项目,通过深度集成Xen虚拟化技术来优化Erlang运行时性能。这个开源项目为Erlang开发者提供了在虚拟化环境中运行Erlang应用程序的全新方式,显著提升了系统的资源利用率和响应速度。LING的核心优势在于将Erlang虚拟机直接运行在Xen hypervisor之上,消除了传统操作系统层的开销,实现了接近裸机的性能表现。 ## 🚀 LING

gitblog_00683的博客 1184

adb详细教程(四)-使用adb启动应用、关闭应用、清空应用数据、获取设备已安装应用列表

adb对于安卓移动端来说,是个非常重要的调试工具。通过ADB可以操作、管理设备上的应用。

公众号|软件测试老吴 3万+

如何快速掌握Erlang运行时系统:5个实用技巧与最佳实践

**Erlang运行时系统(ERTS)** 是支撑Erlang和Elixir高并发应用的核心引擎,而BEAM虚拟机则是其执行灵魂。对于想要深入理解Erlang底层原理的开发者来说,掌握ERTS的构建与优化技巧至关重要。本文将为你提供完整的ERTS构建指南,从基础安装到高级优化,帮助你打造高性能的Erlang运行环境。 ## 为什么你需要深入了解ERTS? 对于大多数Erlang开发者来说,通过

gitblog_00557的博客 570

《Zephyr OS 入门与实战》第5章:内存管理策略

【代码】《Zephyr OS 入门与实战》第5章:内存管理策略。

2301_79143213的博客 349

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

BEAM虚拟机深度解析:Erlang运行时系统的架构设计与性能优化

在当今高并发分布式系统领域,Erlang运行时系统(ERTS)及其核心组件BEAM虚拟机凭借卓越的容错能力和并发处理性能,已成为电信、金融、即时通讯等关键行业的首选技术栈。BEAM虚拟机作为Erlang语言的执行引擎,采用独特的寄存器架构和轻量级进程模型,为大规模并发应用提供了坚实的技术基础。 ## 技术场景与架构挑战 现代分布式系统面临着海量并发连接、低延迟响应和高可用性的三重挑战。传统线程

gitblog_00788的博客 1044

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Erlang 数据类型总结

l Erlang数据类型的特点 先说说自身对于erlang数据类型的感观,本人是C程序员,所以对于每个变量或者说对象都对其大小比较敏感,第一眼看到erlang的数据类型时感觉挺变扭,因为erlang有vm,gc,所以对于数据的大小并不是非常关心,也不需要申请内存,和释放内存都由vm完成此工作,只关心其数据的组成方式,所以从这个角度看erlang,可以总结出erlang数据类型的特点为关心变量的内

zp752963831的专栏 3428

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

erlang

学习Erlang的时候在书的留白处随手记录了一些东西,还有一些记录在了demo的注释里面,今天抽时间整理出来了一部分,分享一下.   Erlang的设计哲学是为每一个独立的事件创建一个新进程.Erlang的容错处理:如果不能完成一个任务就死掉 让其它正常的进程来善后。link函数就是用来建立这种进程间的双向连接来监测非正常退出,并做出处理。BIFs是built-in functions的缩

patrickj12345的专栏 526

[Erlang 0126] 我们读过的Erlang论文

我在Erlang Resources 豆瓣小站上发起了一个征集活动 [链接] ,"[征集] 我们读过的Erlang论文",希望大家来参加.发起这样一个活动的目的是因为Erlang相关的出版物很少,很多时候都是从学术论文中寻找答案,而发现合适的论文是第一步,这个活动就是为了解决这个问题.     在一个极小的知识点可能都会有一篇精彩的论文为你条分缕析,抽丝剥茧,甚至可以拼凑起来一个完整的

229

erlang语言的新特性和发展趋势

Erlang凭借其并发和容错核心,在新特性上持续优化性能和安全,发展趋势则指向云、IoT和AI融合。尽管面临竞争(如Go或Rust),但Erlang在特定领域(如高可用系统)仍有不可替代优势。建议开发者关注OTP更新,并通过Erlang社区论坛参与讨论。如果您有具体场景(如部署问题),我可以提供更针对性的建议!

2501_93582925的博客 834

Rust 和Erlang的对比

\本文要点:\\Erlang提供轻量级流程、不变性、位置透明的分布式、消息传递、监督行为以及许多其他高级动态功能,这些特性使其成为容错、高可用性和可扩展系统的理想之选。\\t不幸的是,在执行XML解析等低层次的事情时,Erlang并不是最理想的,因为处理来自Erlang虚拟机以外的任何东西都很繁琐\\t对于这种情况,不妨考虑一下采用不同的语言。特别是, Rust 最近以其混合特征集登上了前台, 它...

weixin_33698823的博客 124

Erjang架构深度解析:5大核心机制实现JVM上的Erlang运行时革命

在当今微服务架构和分布式系统蓬勃发展的时代,技术架构师们面临着前所未有的挑战。一方面,Erlang凭借其轻量级进程模型和"Let it crash"的容错哲学,在电信和金融等高可用性场景中证明了其价值;另一方面,Java生态系统以其丰富的库资源、成熟的工具链和庞大的开发者社区,成为企业级应用的事实标准。然而,这两种技术栈之间的鸿沟,使得许多组织不得不在架构层面做出艰难取舍。 Erjang项目正是

gitblog_00621的博客 336

深度解析Erlang运行时系统ERTS:实战构建高性能BEAM虚拟机

Erlang运行时系统ERTS是支撑高并发、高可用分布式系统的核心技术基石,而BEAM虚拟机则是其核心执行引擎。本文将为技术开发者和系统架构师深入剖析ERTS的架构设计原理,提供从源码编译到生产部署的完整实战指南,助你掌握构建定制化高性能Erlang运行环境的专业技能。 ## 为什么需要深度掌握ERTS构建技术? 对于追求极致性能的Erlang开发者而言,预编译的ERTS发行版往往无法满足特定

gitblog_00721的博客 910

ErlangOTP学习-Erlang基础学习

需要先学习一下Erlang基础。 从最简单的数据类型开始。 7> 1.23456+1.0. 2.23456 8> 1.234567+1.0. 2.234567 9> 1.2345678+1.0. 2.2345677999999998 10> 从上面浮点数的加法可以看到,erlang中,浮点数据在小数点后7位,相加就不能保证精确度了。

imzoer的专栏 3064
上一篇: Erlang:一个通用的网络服务器
下一篇: 深入理解计算机系统笔记 0,序言
hidetobj
博客等级 码龄19年 16粉丝 301原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值