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

1. Code Dispatch特点

1.1. Directly Threaded

2. Scheduling

2.1. Non-preemptive

2.2. Reduction counting

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

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

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

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

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

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

2.2.7. 主动要求Schedule out

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

3. Garbage Collection

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

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

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

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

3.3.2. 有超多的flag可以调整

4. Virtual Machine

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

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

5. Register Machine

5.1. Stack Machine优点

5.1.1. 易于编译目标代码

5.1.2. 易于实现

5.2. Register Machine优点

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

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

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

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

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

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

5.4.2. 特殊的X0寄存器

5.5. 其他特殊的寄存器

5.5.1. htop

5.5.2. stop

5.5.3. I

5.5.4. fcalls

5.5.5. floating point registers

6. 生成beam code