以下功能是否阻止其正在运行的核心?
一个很好的答案将详细说明erlang和/或cpu的内部工作。
wait(Sec) ->
receive
after (1000 * Sec) -> ok
end.
答案 0 :(得分:2)
简短回答:这将仅阻止当前(轻量级)进程,并且不会阻止所有VM。有关详细信息,您必须阅读有关erlang调度程序的信息。好的描述来自Francesco Cesarini和Simon Thompson的书“Concurent Programming”。
... ...剪断 调度进程时,会为其分配一些减少量† 允许执行,每个都减少一个数字 执行的操作。一旦进程进入receive子句 其中没有消息匹配或其减少计数达到 零,它被抢先一步。只要BIF没有被执行,这个 策略导致公平(但不相等)的执行分配 过程中的时间。 ... ...剪断
答案 1 :(得分:1)
没有特定于Erlang的经典问题:超时只能发生在系统时钟中断上。与上面相同的答案:该进程被阻塞等待时钟中断,其他一切正常工作。
还有另一个关于进程等待的实际时间的讨论,这个时间并不精确,因为它取决于时钟周期(并且取决于系统),但这是另一个主题。