0

是否可以创建一个“工作线程”,可以说它处于待机状态,直到它接收到异步执行的函数?

有没有办法发送一个像

def some_function
 puts "hi"
 # write something
 db.exec()
end

到一个只是坐在那里等待的现有线程?

这个想法是我想典当一些数据库写入异步运行的线程。

我想创建一个Queue实例,然后让一个线程做这样的事情:

$command = Queue.new
Thread.new do
 while trigger = $command.pop
  some_method
 end
end

$command.push("go!")

然而,这似乎不是一个特别好的方法。什么是更好的选择?

4

1 回答 1

0

线程宝石看起来很适合您的需求:

require 'thread/channel'

def some_method
  puts "hi"
end

channel = Thread.channel

Thread.new do
  while data = channel.receive
    some_method
  end
end

channel.send("go!")
channel.send("ruby!") # Any truthy message will do
channel.send(nil)     # Non-truthy message to terminate other thread

sleep(1)              # Give other thread time to do I/O

该频道使用ConditionVariable,如果您愿意,可以自己使用。

于 2013-07-25T09:02:41.180 回答