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

本文深入探讨Erlang虚拟机中的进程创建机制,重点分析了erlang:spawn/3函数的工作原理及其内部调用流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值