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