Ruby 线程

线程是指共享内存空间并可同时运行的控制流。使用线程便可进行并行编程。

现在Ruby的线程是用户级的线程,可在所有平台上实现相同的运作。下面就来看看线程的运作情况。

Ruby线程的运作方式

程序开始时同步生成的线程称作main thread。当main thread结束时,其他所有线程以及整个程序也会结束。用户的介入所引起的异常也会被送给main thread

线程启动时会指定一个块。当这个块结束运行时,该线程也会终结。块的结束既包括正常结束又包括因错误等引起的异常结束。

Ruby的线程调度采用的是一种带优先顺序的循环调度法。每隔一段时间或者当运行中的线程放弃权利的时候,就对进行调度。从可运行的线程中选出优先级别最高的加以运行。

线程和异常

当某线程发生异常,且没有被rescue捕捉到时,该线程通常会被无警告地终止。但是,若有其它线程因为Thread#join的关系一直等待该线程的话,则等待的线程同样会被引发相同的异常。

begin
  t = Thread.new do
    Thread.pass    # 主线程确实在等join
    raise "unhandled exception"
  end
  t.join
rescue
  p $!  # => "unhandled exception"
end

使用下列3个方法,就可以让解释器在某个线程因异常而终止时中断运行。

当使用上述3种方法之一后,整个解释器就会被中断。