Ruby 有熟悉 Fiber 的吗,Fiber 应该怎样销毁?

rubyonme · May 14, 2012 · Last by hooopo replied at May 14, 2012 · 2925 hits

目前做的项目是采用 Fiber 来处理多个异步请求,比如一个 method 需要 3 步完成: 1: 查询 redis 2: socket 发送信息 3: 处理 socket 返回信息

每一个执行步骤中间都需要调用 Fiber.yield 使得相应的 fiber 休眠。正常情况执行完 3 个步骤 fiber 就退出了,但如果某个步骤没有正常返回,fiber 就不会执行完毕,就会产生未执行完毕的 fiber,占用系统内存。

Fiber 没有 exit 之类的方法,那么这些未执行完毕的 fiber 应该怎样退出或者销毁呢?

Unknow user #1 May 14, 2012

我猜个 fibel = nil 让对象失去所有引用 GC 就可以回收了

这个不熟悉,建议有空翻翻 EM 的源码,比如对 ssh client 的实现,应该会有思路

楼主可以看看 rack fiber pool 的实现。

You need to Sign in before reply, if you don't have an account, please Sign up first.