我是Erlang的新手,对a非常感兴趣hybrid memory model.我有几个问题.
message?Erlang是否将自身的序列化对象或对象传递给共享内存堆?garbage collector知道哪个消息不再使用,可以删除?我建议你阅读Joe Armstrong的博士,在那里他详细解释了他在撰写第一个Erlang实现时必须做出的各种设计决策背后的原因.
消息传递在第25页说明:
2.4.5消息传递
消息传递遵循以下规则:
- 假设消息传递是原子的,这意味着消息要么全部传递,要么根本不传递.
- 假定在一对进程之间传递消息是有序的,这意味着如果在任何一对进程之间发送和接收消息序列,则将以与它们被发送的顺序相同的顺序接收消息.
- 消息不应包含指向进程中包含的数据结构的指针 - 它们应该只包含常量和/或Pids.
要回答上面没有回答的问题:
Erlang是一种函数式语言,它与对象无关.您可以在进程之间传递的唯一复合数据结构是元组,映射和列表.Erlang中没有共享状态,因此消息在进程之间复制.实际上可以通过BEAM(Erlang虚拟机)将指针传递给共享内存片段来实现该副本,但这是一种从Erlang本身隐藏的优化.在Erlang中也没有指针,因此无法从另一个进程的代码访问一个进程的内存(甚至是故意的).
所有数据结构与垃圾收集器相同 - 如果进程未引用数据,则可以从内存中删除它.当消息到达时,它会保留在进程收件箱中,因此它被引用.当它从收件箱中取出时,它由进程代码以与任何其他变量相同的方式处理 - 如果它不再被使用,则它被删除.
| 归档时间: |
|
| 查看次数: |
50 次 |
| 最近记录: |