©
This document usesPHP Chinese website manualRelease
线程是指共享内存空间并可同时运行的控制流。使用线程便可进行并行编程。
现在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个方法,就可以让解释器在某个线程因异常而终止时中断运行。
Thread.abort_on_exception
设置标志。Thread#abort_on_exception
对指定的线程设定标志。当使用上述3种方法之一后,整个解释器就会被中断。