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

rubyonme · 2012年05月14日 · 最后由 hooopo 回复于 2012年05月14日 · 2925 次阅读

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

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

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

匿名 #1 2012年05月14日

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

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

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

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