Get Started. It's Free
or sign up with your email address
Rocket clouds
THE BEAM by Mind Map: THE BEAM

1. Code Dispatch特点

1.1. Directly Threaded

2. Virtual Machine

2.1. 由软件实现,而不是实在的硬件

2.2. BEAM目前没有正式的标准,现在唯一由Erlang/OTP的实现定义

3. Register Machine

3.1. Stack Machine优点

3.1.1. 易于编译目标代码

3.1.2. 易于实现

3.2. Register Machine优点

3.2.1. Stack Machine需要对内存进行push&pop操作

3.2.2. 需要操心栈内参数顺序(以及push&pop进行调整)

3.2.3. 参数存于寄存器内,操作数作为一个参数也在寄存器中

3.3. BEAM会把一些特定的Register映射到硬件上的Register上去

3.4. 两种寄存器:X和Y类

3.4.1. Y寄存器实际上是存在于栈上的

3.4.2. 特殊的X0寄存器

3.5. 其他特殊的寄存器

3.5.1. htop

3.5.2. stop

3.5.3. I

3.5.4. fcalls

3.5.5. floating point registers

4. Scheduling

4.1. Non-preemptive

4.2. Reduction counting

4.2.1. 每个function call会消耗一个reduction

4.2.2. BEAM在function call之前会检查Reduction,<0时会把process调度出

4.2.3. 每个Reduction之间做的应该都是很小量的工作

4.2.4. 循环其实是递归,也消耗Reduction

4.2.5. process在等待receieve的时候也会被schedule out

4.2.6. 对于一些bif和你自己写的一些nif来说,尤其要注意把调度器噎着了的情况

4.2.7. 主动要求Schedule out

4.2.8. 在每次function call之前,BEAM会保证process的状态是合法的(in a known state)

5. Garbage Collection

5.1. "test_heap"检查是否有可用堆空间

5.2. 如有需要,指令会调用GC

5.3. GC可能会调用更底层的内存管理子系统来进行分配/回收内存

5.3.1. GC底层有十几种各有侧重的memory allocator

5.3.2. 有超多的flag可以调整

6. 生成beam code