Ruby线程仍然阻塞

时间:2014-09-13 08:25:25

标签: ruby multithreading

我正在运行一个线程将“数据”放到屏幕上。 该线程的目的是阻止此函数的阻塞,这样我就可以在回收数据的同时将数据发送到套接字。

def msg_loop()
    t1 = Thread.new{
            loop do
            msg = @socket.recv(30)
            self.msg_dis(msg)
            end
        }
        t1.join
end 

但是如果我跑

myclass.msg_loop
myclass.send_msg("message to send")

函数send_msg永远不会运行,与msg_loop没有线程没有区别。

2 个答案:

答案 0 :(得分:2)

t1.join导致程序等到线程t1运行完毕。你想这样做。

def msg_loop()
  t1 = Thread.new{
        loop do
        msg = @socket.recv(30)
        self.msg_dis(msg)
        end
  }
  t1
end

t1 = myclass.msg_loop
myclass.send_msg("message to send")
t1.join

答案 1 :(得分:-2)

Ruby并没有提供真正的线程(jruby确实如此)。 有一个无限循环,例如我在ruby中的线程,并没有做任何事情,因为循环永远不会结束。

这会导致线程永远不会发生阻塞。