Multithreading Erlang梁机的简化
是一种著名的编程语言(除其他外) 因为它是轻量级线程。Erlang通常使用实现。 Erlang光束机的描述(H'97)显示 为了保证公平的调度,进程在固定时间后暂停 减少次数,然后队列中的第一个进程 接着说 我对减量这个概念很感兴趣。根据(H'97),只有以下光束命令算作减少:Multithreading Erlang梁机的简化,multithreading,concurrency,erlang,scheduling,vm-implementation,Multithreading,Concurrency,Erlang,Scheduling,Vm Implementation,是一种著名的编程语言(除其他外) 因为它是轻量级线程。Erlang通常使用实现。 Erlang光束机的描述(H'97)显示 为了保证公平的调度,进程在固定时间后暂停 减少次数,然后队列中的第一个进程 接着说 我对减量这个概念很感兴趣。根据(H'97),只有以下光束命令算作减少: C/CO/ResC:调用本地/常驻Erlang函数 CL:放弃当前堆栈帧。调用本地Erlang函数 CEx/TrCEx:调用外部Erlang函数(跟踪或其他) CExL/TrCExL:放弃当前堆栈帧并调用外部Erlan
- C/CO/ResC:调用本地/常驻Erlang函数
- CL:放弃当前堆栈帧。调用本地Erlang函数
- CEx/TrCEx:调用外部Erlang函数(跟踪或其他)
- CExL/TrCExL:放弃当前堆栈帧并调用外部Erlang函数(跟踪或其他)
- M_C_r:加载参数寄存器x(0)。调用常驻Erlang函数
- M_CL_r:加载参数寄存器x(0)。放弃当前堆栈帧。调用本地Erlang函数
(H'97)B.豪斯曼,.我只知道第一个问题的答案:
我会尽力回答你们的问题 1) 不使用时间片的主要原因是性能和可移植性。从操作系统中读取单调的时间值是非常昂贵的,如果我们必须为每个函数调用都这样做,那么开销就会非常大。不同操作系统的成本也有很大差异。然而,减少计数机制只要求机器擅长减少整数,而大多数机器都是这样 2) 他们没有。正如你所说,这份清单已经过时了。从那时起,虚拟机的大部分工作方式都被重写了。作为一般经验法则;函数调用(而不是返回)或任何可能需要未知时间的操作都会减少计数。这包括bifs、nifs、gc、发送/接收消息,可能还有我现在想不到的更多
3) 计划和先发制人是完全不同的事情。您可能想看看我几年前举办的关于如何安排日程的网络研讨会:谢谢。在什么意义上,还原步骤是精确的?毕竟,被算作缩减的命令在不同的平台上有不同的持续时间。它们在相对而言和成本上是相等的。@Lucas,谢谢。这是非常有益的。我想知道是否有办法编写占用CPU的(长的、直线的)Erlang程序,因为它们不涉及减少缩减计数器的代码。是的,但由于Erlang中除了函数调用之外没有循环构造,这只是一个理论问题。@Lucas是的,但即使你稍微展开一个函数,比如说4次递归解绑,与原始函数相比,CPU上的时间应该多出大约4倍。并不是说这在实践中是个问题。