ERLANG等待()和阻止

时间:2012-01-24 04:16:16

标签: erlang wait

以下功能是否阻止其正在运行的核心?

一个很好的答案将详细说明erlang和/或cpu的内部工作。

wait(Sec) -> 
    receive
    after (1000 * Sec) -> ok
    end.

2 个答案:

答案 0 :(得分:2)

简短回答:这将仅阻止当前(轻量级)进程,并且不会阻止所有VM。有关详细信息,您必须阅读有关erlang调度程序的信息。好的描述来自Francesco Cesarini和Simon Thompson的书“Concurent Programming”。

  

... ...剪断   调度进程时,会为其分配一些减少量†   允许执行,每个都减少一个数字   执行的操作。一旦进程进入receive子句   其中没有消息匹配或其减少计数达到   零,它被抢先一步。只要BIF没有被执行,这个   策略导致公平(但不相等)的执行分配   过程中的时间。   ... ...剪断

答案 1 :(得分:1)

没有特定于Erlang的经典问题:超时只能发生在系统时钟中断上。与上面相同的答案:该进程被阻塞等待时钟中断,其他一切正常工作。

还有另一个关于进程等待的实际时间的讨论,这个时间并不精确,因为它取决于时钟周期(并且取决于系统),但这是另一个主题。