0 0

[Erlang] 关于调度策略的疑惑?20

一般来说,对于任何一种 Coroutine 技术而言,除非当前 Coroutine 代码主动释放给调度器(yield)否则会一直独占 CPU,这也是为什么 Coroutine 会比线程开销小的重要基础(无需加锁,对所有内存的访问只要不跨越 yield 语句就可以认为不受干扰),Erlang 的轻量级进程的效率非常高,我原以为一定是基于 Coroutine 或者类似的机制实现的(比如当 receive 的时候 yield 给调度器),但是我看到下面一段文字时有一点疑惑

“并发性——语言必须提供一种轻量化的机制来创建并行进程,以及在进程间发送消息。进程的上下文切换、消息传递必须非常高效。并行进程还必须以一种合理的方式来分享 CPU 时间,以便当前使用 CPU的进程不至于垄断 CPU,而其他的进程处于“准备好”状态而得不到处理。”-- 摘自Joe Armstrong《面对软件错误构建可靠的分布式系统 》(段先德译)

这句话似乎不保证进程的执行在 receive 之间是不受干扰的?我不知道这里的“合理的方式”到底是什么,哪位大侠能解释一下?Erlang 是否会在 receive 语句之间进行切换?




FP 
2008年9月23日 22:22
目前还没有答案

相关推荐

Global site tag (gtag.js) - Google Analytics