【发布时间】:2022-01-04 19:42:22
【问题描述】:
我知道,为了确保读取内存访问的所有线程读取完全相同的值,Elixir 永远不会覆盖正在使用的地址。相反,如果一个 var 发生了变化,它会被写入一个新地址。
我想知道这将如何影响实时游戏。例如,在 3D 游戏中移动会产生大量不同的值,需要重新分配和及时释放旧值。与简单地根据需要重写内存中的值相比,对于游戏而言,这有多好或更差?
【问题讨论】:
标签: memory-management elixir immutability
我知道,为了确保读取内存访问的所有线程读取完全相同的值,Elixir 永远不会覆盖正在使用的地址。相反,如果一个 var 发生了变化,它会被写入一个新地址。
我想知道这将如何影响实时游戏。例如,在 3D 游戏中移动会产生大量不同的值,需要重新分配和及时释放旧值。与简单地根据需要重写内存中的值相比,对于游戏而言,这有多好或更差?
【问题讨论】:
标签: memory-management elixir immutability
这是一个非常笼统的问题。像非常一般。
首先,BEAM(Elixir 和 Erlang VM)优先考虑吞吐量和可预测的响应能力而不是延迟,但在游戏中延迟为王,延迟越多,FPS 就越低。
其次,BEAM 主要是为容错和并发性而非性能而设计的,因此性能方面的 C/C++ 在进行直接内存访问和计算时会更快。
一般来说,不可变数据结构具有成本优势(安全的并发性、更简单的程序推理、调试过程中的头痛和更简单的算法)原始性能。
【讨论】: