Erlang是一种着名的编程语言(除此之外) 因为它的轻量级线程。 Erlang通常使用BEAM machine实现。 Erlang BEAM机器的描述(H' 97)说
为了保证公平的安排,一个过程在修复后暂停 减少的数量,然后是队列中的第一个进程 恢复。
我对这种减少的概念很感兴趣。根据(H' 97),只有以下BEAM命令计为减少:
所有这些都涉及函数调用。 相反,对C函数的调用(例如 TrC / TrCO )和对内置函数的调用(例如,由 Bif_0 _ 调用)不算作 减量。
问题。在此序言之后,我想知道这一点。
(H' 97)B。豪斯曼,The Erlang BEAM Virtual Machine Specification。
答案 0 :(得分:4)
我只知道第一个问题的答案:
答案 1 :(得分:2)
我会尽力回答你的问题。
1)不使用时间片的主要原因是性能和可移植性。从操作系统读取单调时间值是非常昂贵的,如果我们必须为每个函数调用执行它,则开销变得非常大。不同操作系统的成本也有很大差异。然而,减少计数机制只需要机器擅长减少大多数机器的整数。
2)他们没有。正如你所说,那个清单已经过时了。从那时起,VM的大部分工作方式都被重写了。一般的经验法则;函数调用(不是返回)或任何可能花费未知时间的事物都会减少。这包括bifs,nifs,gc,发送/接收消息,以及我现在想不到的更多信息。
3)调度和抢占是非常不同的事情。你可能想看看我几年前做过的关于如何完成日程安排的网络研讨会:https://www.youtube.com/watch?v=tBAM_N9qPno