4. Erlang虚拟机的进程创建
在第三节中我们分析了Erlang虚拟机的进程调度和指令集(threaded-code)的执行过程,这一节我们分析Erlang虚拟机的进程创建过程。
首先,创建一个需要调用内建函数(BIF)erlang:spawn或者spawn_opt,spawn_link等,这里我们分析spawn函数的调用过程。所有spawn函数最后都会调用spawn/3这个BIF,这个内建函数被编译成字节码,在加载到erlang虚拟机后对应的threaded-code格式为:
所有3参数的BIF入口branch都是lb_bif_3,其中address保存着该threaded-code错误处理的回调函数入口地址,bif保存了spawn函数在BIF export tables中的index,然后type标志了每个参数的类型。当执行调度的时候调度器首先通过Goto(*next)跳转到lb_i_gc_bif3_jIsId,然后通过I分析出BIF的入口地址,并跳转到对应的BIF中,erlang:spawn/3对应的BIF函数为spawn_3(),其定义位于otp_src_R15B01/erts/emulator/beam/bif.c。定义如下:
BIF_RETTYPE spawn_3(BIF_ALIST_3)
{
ErlSpawnOpts so;
Eterm pid;
so.flags = 0;
pid = erl_create_process(BIF_P, BIF_ARG_1, BIF_ARG_2, BIF_ARG_3, &so);
if (is_non_value(pid)) {
BIF_ERROR(BIF_P, so.error_code);
} else {
if (ERTS_USE_MODIFIED_TIMING()) {
BIF_TRAP2(erts_delay_trap, BIF_P, pid, ERTS_MODIFIED_TIMING_DELAY);
}
BIF_RET(pid);
}
}
其主要核心是调用erl_create_process()函数,该函数的定义在otp_src_R15B01/erts/emulator/beam/erl_process.c中,而erl_create_process()函数的剖析这篇文章(Erlang并发机制 - 进程)已经说得很详细,不再赘述。
相关资料:
4.Characterizing the Scalability of Erlang VM on Many-core Processors
相关推荐
Erlang核心开发者Lukas Larsson在2014年3月份Erlang Factory上的一个演讲详细介绍了Erlang内存体系的原理以及调优案例 根据siyao zheng博客上听写的资源进行的翻译,大致只翻译了80%但核心部分已经完整,希望对大家...
hex, Erlang虚拟机的软件包管理器 十六进制 Hex是Erlang虚拟机的软件包管理器。这个项目目前提供了与混合。tcm 工具构建的任务。有关安装说明和其他文档,请参阅 hex.pm 。在本地安装十六进制以进行开发: mix ...
源码中可能包含了`erts`(Erlang Run-Time System)的相关部分,它负责进程的创建、调度和通信。了解这些内部实现有助于理解Erlang如何高效地处理并发。 2. **BEAM虚拟机** BEAM是Erlang虚拟机的缩写,它是Erlang...
Erlang虚拟机(Erlang VM,也称为BEAM虚拟机)是Erlang编程语言的核心组成部分,它为Erlang提供了强大的并发特性和故障容错能力。基于Erlang VM的语言充分利用了这些优势,同时也引入了不同语法和编程范式的创新。 ...
Erlang是一种面向并发的、动态类型的编程语言,主要用于构建高度可扩展的、容错性强的分布式系统。...在`code`这个文件中,你可以找到实际的源码,通过阅读和分析,将理论知识与实践相结合,提升对Erlang编程的掌握。
2. **并发编程**:Erlang中的进程是轻量级的,创建和销毁成本低,适合处理大量并发请求。在游戏服务器中,每个玩家的交互可能被视为一个独立的进程,从而实现高效、无阻塞的并发处理。 3. **分布式系统**:Erlang...
7. **学习路径**:初学者可以通过阅读和调试这些源码,了解Erlang的基本语法、模块结构、进程通信以及数据库操作。同时,也可以研究其错误处理和日志记录机制,以增强对Erlang实际开发流程的理解。 8. **实践经验**...
Erlang是一种面向并发的、动态类型的编程语言,主要用于构建分布式、容错性强的系统。OTP(Open Telecom ...同时,对于研究分布式系统、并发编程或者虚拟机设计的人来说,Erlang 21.0的源码也是一个宝贵的教育资源。
Erlang的`gen_server`行为可以用来创建服务进程,负责接收和分发消息。 3. **聊天室房间管理**:可能有多个聊天室,用户可以选择加入或退出。这就需要一个房间管理模块来维护用户与房间的关系,以及管理各个房间的...
Erlang是运行于虚拟机的解释性语言,但是现在也包含有乌普萨拉大学高性能Erlang计划(HiPE)开发的本地代码编译器,自R11B-4版本开始,Erlang也开始支持脚本式解释器。在编程范型上,Erlang属于多重范型编程语言,...
Erlang源码揭示了这些模块如何设计和实现,包括如何使用Erlang的模块化特性来组织代码,以及如何通过进程间的通信来协调各个部分的工作。 5. **热代码升级** Erlang的热代码升级机制允许在不中断服务的情况下更新...
创建进程的成本非常低,因此Erlang可以支持大量的并发进程。 2. 进程创建 Erlang中可以通过`spawn/1`、`spawn/2`、`spawn/3`或`spawn_link/1`等函数创建新进程。例如,`spawn/1`接受一个函数,该函数将在新进程中...
- **BEAM虚拟机**:Erlang程序运行在BEAM(Berkeley ERLang)虚拟机上,它设计为高效处理并发和容错。 - **进程模型**:Erlang采用轻量级进程模型,进程间通信快速且高效,支持分布式计算。 - **模式匹配**:Erlang...
在源码中,你可能会看到Erlang的并发特性如`spawn`和`receive`表达式,它们允许创建和管理并发运行的进程。此外,`gen_server`行为模式可能被用来实现状态管理和服务的生命周期控制。`rabbitMQ`的灵感可能体现在消息...
erlang 服务端代码 例子,演示了如何管理角色
Erlang Server源码分析与详解 Erlang是一种面向并发的、函数式编程语言,以其在分布式系统、高可用性和容错性方面的优势而受到广泛关注。尤其在构建大规模聊天室服务器这样的实时通信系统中,Erlang的性能表现突出...
对于初学者,可以通过阅读《Erlang程序设计》这本书了解基本语法、数据类型、控制结构、模式匹配以及Erlang的并发特性。同时,结合源码分析,可以提升实战能力。 总之,这份资源为Erlang初学者提供了全面的学习...
2. 容错性:Erlang支持热代码升级,进程间通信通过消息传递,当某个进程出错时,不会影响其他进程,提高了系统的稳定性。 3. 分布式:Erlang节点可以轻松地跨多个物理机器分布,便于构建大规模分布式系统。 在"远古...
1. 轻量级进程:Erlang中的进程非常轻,创建和销毁的开销极小,因此可以支持大规模的并发。源码中可以看到进程如何被创建和管理,以及它们之间的通信方式。 2. 消息传递:Erlang的进程间通信通过异步的消息传递实现...