参考手册:Ruby 语言样式——线程

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

现在php?name=Ruby" onclick="tagshow(event)" class="t_tag">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个方法,就可以让解释器在某个线程因异常而终止时中断运行。

  * 启动脚本时指定-d选项,并以调试模时运行。
  * 用Thread.abort_on_exception设置标志。
  * 使用Thread#abort_on_exception对指定的线程设定标志。

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