ERLANG wait()和阻塞

ERLANG wait()和阻塞,erlang,wait,Erlang,Wait,以下功能块是否位于其运行内核上 等待(秒)-> 接收 在(1000*秒)->确定后 结束。 一个很好的答案将详细说明Erlang和/或CPU的内部工作。执行该代码的进程将阻塞,当前运行该进程的调度程序不会阻塞。您发布的代码等于收益,但有一个超时 该内核的Erlang VM调度程序将继续执行其他进程,直到触发超时,并且该进程将被再次调度执行。简短回答:这将仅阻止当前(轻量级)进程,而不会阻止所有VM。有关更多详细信息,您必须阅读有关erlang scheduler的信息。好的描述来自弗朗西斯科·

以下功能块是否位于其运行内核上

等待(秒)->
接收
在(1000*秒)->确定后
结束。

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

执行该代码的进程将阻塞,当前运行该进程的调度程序不会阻塞。您发布的代码等于收益,但有一个超时


该内核的Erlang VM调度程序将继续执行其他进程,直到触发超时,并且该进程将被再次调度执行。

简短回答:这将仅阻止当前(轻量级)进程,而不会阻止所有VM。有关更多详细信息,您必须阅读有关erlang scheduler的信息。好的描述来自弗朗西斯科·塞萨里尼(Francesco Cesarini)和西蒙·汤普森(Simon Thompson)的《并发编程》(Concurent Programming)一书

…剪断。。。 调度流程时,会为其分配若干缩减† 它被允许执行,每执行一次就减少一个数字 已执行操作。一旦流程输入receive子句 其中没有任何消息匹配或其减少计数达到 零,它被抢占。只要BIF没有被执行,这 战略导致公平(但不平等)的执行分配 进程之间的时间。 …剪断


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


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

是否存在与NodeJS的
setTimeout
等效的erlang?对于电流来说,它是非阻塞的thread@CMCDragonkai:您可以立即阻止接收(有或没有超时),也可以不阻止。通过将超时设置为
0
,您可以在
接收
呼叫之间安排工作。这基本上意味着检查你的收件箱,如果它是空的,继续工作。您还可以使用例如计划更高级的检查。