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

Erlang虚拟机源码阅读笔录(四)虚拟机的进程创建

阅读更多

4. Erlang虚拟机的进程创建

在第三节中我们分析了Erlang虚拟机的进程调度和指令集(threaded-code)的执行过程,这一节我们分析Erlang虚拟机的进程创建过程。

首先,创建一个需要调用内建函数(BIF)erlangspawn或者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并发机制 - 进程)已经说得很详细,不再赘述。

 

相关资料:

1.Erlang并发机制 - 进程

2.Erlang并发机制进程调度

3.Erlang并发机制任务迁移算法

4.Characterizing the Scalability of Erlang VM on Many-core Processors

5. Erlang并发机制消息传递

6.Erlang并发机制垃圾回收

7. The Erlang BEAM Virtual Machine Specification

  • 大小: 1.7 KB
分享到:
评论

相关推荐

    Erlang虚拟机内存管理

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

    hex, Erlang虚拟机的软件包管理器.zip

    hex, Erlang虚拟机的软件包管理器 十六进制 Hex是Erlang虚拟机的软件包管理器。这个项目目前提供了与混合。tcm 工具构建的任务。有关安装说明和其他文档,请参阅 hex.pm 。在本地安装十六进制以进行开发: mix ...

    erlang 程序设计 源码

    erlang 程序设计 源码 erlang 程序设计 源码 erlang 程序设计 源码erlang 程序设计 源码

    erlang 部分源码

    erlang 部分源码, 虽然不是很全,但是大部分都有。 erlang 部分源码

    英雄远征erlang源码

    英雄远征服务器端erlang源码,用mysql数据库

    基于Erlang VM的语言

    基于Erlang VM的语言基于Erlang基于Erlang VM的语言 VM的语言基于Erlang VM的语言

    erlang21.0源码

    erlang21.0源码。! erlang21.0源码。!erlang21.0源码。!erlang21.0源码。!

    Erlang编程指南

    Erlang是运行于虚拟机的解释性语言,但是现在也包含有乌普萨拉大学高性能Erlang计划(HiPE)开发的本地代码编译器,自R11B-4版本开始,Erlang也开始支持脚本式解释器。在编程范型上,Erlang属于多重范型编程语言,...

    erlang server源码

    erlang server源码 一个聊天室服务器源码

    英雄远征erlang服务器源码含数据库

    erlang具有良好的高并发性 支持热更新 本代码适合初学者更快的上手

    远古封神Server(erlang源码)+文档+mongodb数据库

    远古封神Server(erlang源码)+文档+mongodb数据库 远古封神Server(erlang源码)+文档+mongodb数据库

    erlang 聊天室源码

    erlang 聊天室源代码,初学者项目,花了两周时间完成,其中设计参考的是著名聊天软件rabbitMQ 的部分模块

    erlang入门级练习:LeetCode OJ问题的部分erlang 源码

    我自己在新学erlang,在LeetCode OJ上找了题目练习,题目很适合新手熟悉语言,但是LeetCode OJ里面只有几门主流语言的答案,下面是已完成的erlang源代码,后续有空再做其他问题续传,题目包含:(源码开头都有题目...

    erlang四大behaviour之四-supervisor

    erlang四大behaviour之四-supervisor

    erlang源码包

    erlang源码安装包,此安装包是linux环境下的;erlang的版本是5.10.3

    Erlang进程模型学习PPT

    Erlang进程模型特点 一个进程可以创建数以万计的轻量级进程 每个轻量级进程仅仅完成单一功能 一个复杂的功能可以由多个轻量级进程协同完成 当遇到file或socket等阻塞的io时, 调用的轻量级进程被阻塞,整个进程不...

    erlang聊天室源码

    附有需求文档,设计文档,以及一些说明文档,简单的聊天室功能,适合初学者阅读,是本人学习erlang过程中写的,参照了rabbitMQ的核心模块

    远古封神Server(erlang源码)

    远古封神Server(erlang源码)+文档+mongodb数据库

Global site tag (gtag.js) - Google Analytics