我们知道 Ruby 支持 Fiber:
fiber = Fiber.new do
Fiber.yield 1
2
end
Fiber 的一个问题是,只能显式进行调度,只有通过 yield 才能释放 CPU 给其他 Fiber。那么有什么办法支持定时抢占式调度?
一个可能的实现,定时触发操作系统 signal,然后在 signal 处理过程的时候进行调度。
为什么要问这个问题呢,我们知道 Ruby 因为 GIL 不能实现真正意义上的 CPU 并发,不过可以用 Thread 实现异步,我在想是否可以用 Fiber 实现异步,这样类似于用 Ruby 实现了一个进程系统。