红宝石赛璐oid和垃圾回收

时间:2018-07-02 18:37:39

标签: ruby celluloid

我正在与Celluloid编写并发应用程序,并且对期货和Actor的适当销毁/终止有疑问。我有一个这样创建的队列:

<s:select label="What's your favor search engine" 
    headerKey="-1" headerValue="Select Search Engines"
    list="searchEngine" 
    name="yourSearchEngine" />

ArrayThread只是一个包含赛璐oid的数组:

Celluloid::Actor[:input_queue] = ArrayThread.new()

在程序运行时,将创建包含对象的线程,并将其压入上述input_queue,如下所示:

class ArrayThread < Array
  include Celluloid

  def initialize(arr=[])
    super(arr)
  end
end

Kob类包括赛璐oid,并且包含一个process()方法,该方法执行大量操作,这需要一些时间。目标是能够创建尽可能多的内存/ CPU允许的事物,并使它们同时进行处理。

所有这些都工作正常,并且基于资源,将input_queue的代码限制为固定长度。另一个线程应该从input_queue中提取项目,对其进行处理,然后将其中的一些项目推入一个单独的队列中,以便稍后由第三个线程进一步处理。

现在是我的问题,那些没有被压入第二个队列的对象需要销毁。这是我目前执行此操作的代码:

k = Kob.new(path.chomp)
Celluloid::Actor[:input_queue].push({:obj => k, :future => k.future(:process)})

确定k是保留还是销毁。如果它需要走,那么...

k = Celluloid::Actor[:input_queue].shift

我不确信自己做对了,并担心这里的内存泄漏。我该如何验证?我在IRB中玩过,但是ObjectSpace数据似乎没有改变。我什至尝试手动调用垃圾回收,但这似乎也没有任何效果。有人可以启发我吗?

0 个答案:

没有答案