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 ...
erlang 程序设计 源码 erlang 程序设计 源码 erlang 程序设计 源码erlang 程序设计 源码
erlang 部分源码, 虽然不是很全,但是大部分都有。 erlang 部分源码
英雄远征服务器端erlang源码,用mysql数据库
基于Erlang VM的语言基于Erlang基于Erlang VM的语言 VM的语言基于Erlang VM的语言
erlang21.0源码。! erlang21.0源码。!erlang21.0源码。!erlang21.0源码。!
Erlang是运行于虚拟机的解释性语言,但是现在也包含有乌普萨拉大学高性能Erlang计划(HiPE)开发的本地代码编译器,自R11B-4版本开始,Erlang也开始支持脚本式解释器。在编程范型上,Erlang属于多重范型编程语言,...
erlang server源码 一个聊天室服务器源码
erlang具有良好的高并发性 支持热更新 本代码适合初学者更快的上手
远古封神Server(erlang源码)+文档+mongodb数据库 远古封神Server(erlang源码)+文档+mongodb数据库
erlang 聊天室源代码,初学者项目,花了两周时间完成,其中设计参考的是著名聊天软件rabbitMQ 的部分模块
我自己在新学erlang,在LeetCode OJ上找了题目练习,题目很适合新手熟悉语言,但是LeetCode OJ里面只有几门主流语言的答案,下面是已完成的erlang源代码,后续有空再做其他问题续传,题目包含:(源码开头都有题目...
erlang四大behaviour之四-supervisor
erlang源码安装包,此安装包是linux环境下的;erlang的版本是5.10.3
Erlang进程模型特点 一个进程可以创建数以万计的轻量级进程 每个轻量级进程仅仅完成单一功能 一个复杂的功能可以由多个轻量级进程协同完成 当遇到file或socket等阻塞的io时, 调用的轻量级进程被阻塞,整个进程不...
附有需求文档,设计文档,以及一些说明文档,简单的聊天室功能,适合初学者阅读,是本人学习erlang过程中写的,参照了rabbitMQ的核心模块
远古封神Server(erlang源码)+文档+mongodb数据库