首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2013-04-21 
Erlang虚拟机源码阅读笔录(四)虚拟机的进程创建??所有3参数的BIF入口branch都是lb_bif_3,其中address保存

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

?

?

所有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

热点排行