Ruby Fiber 如何实现定时调度?

linjunhalida · 2015年02月09日 · 最后由 bhuztez 回复于 2015年02月09日 · 1862 次阅读

我们知道 Ruby 支持 Fiber:

fiber = Fiber.new do
  Fiber.yield 1
  2
end

Fiber 的一个问题是,只能显式进行调度,只有通过 yield 才能释放 CPU 给其他 Fiber。那么有什么办法支持定时抢占式调度?

一个可能的实现,定时触发操作系统 signal,然后在 signal 处理过程的时候进行调度。

为什么要问这个问题呢,我们知道 Ruby 因为 GIL 不能实现真正意义上的 CPU 并发,不过可以用 Thread 实现异步,我在想是否可以用 Fiber 实现异步,这样类似于用 Ruby 实现了一个进程系统。

抢占式调度好像是不可能的啦。Fiber 这类都是 cooperative multitasking

还是用 Erlang 吧。其次可以试试 Stackless Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号