?
Ce document utilise Manuel du site Web PHP chinois Libérer
線程是指共享內存空間并可同時運行的控制流。使用線程便可進行并行編程。
現(xiàn)在Ruby的線程是用戶級的線程,可在所有平臺上實現(xiàn)相同的運作。下面就來看看線程的運作情況。
程序開始時同步生成的線程稱作main thread。當main thread結束時,其他所有線程以及整個程序也會結束。用戶的介入所引起的異常也會被送給main thread。
線程啟動時會指定一個塊。當這個塊結束運行時,該線程也會終結。塊的結束既包括正常結束又包括因錯誤等引起的異常結束。
Ruby的線程調度采用的是一種帶優(yōu)先順序的循環(huán)調度法。每隔一段時間或者當運行中的線程放棄權利的時候,就對進行調度。從可運行的線程中選出優(yōu)先級別最高的加以運行。
當某線程發(fā)生異常,且沒有被rescue捕捉到時,該線程通常會被無警告地終止。但是,若有其它線程因為Thread#join的關系一直等待該線程的話,則等待的線程同樣會被引發(fā)相同的異常。
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種方法之一后,整個解釋器就會被中斷。