?
このドキュメントでは、 php中國(guó)語(yǔ)ネットマニュアル リリース
線(xiàn)程是指共享內(nèi)存空間并可同時(shí)運(yùn)行的控制流。使用線(xiàn)程便可進(jìn)行并行編程。
現(xiàn)在Ruby的線(xiàn)程是用戶(hù)級(jí)的線(xiàn)程,可在所有平臺(tái)上實(shí)現(xiàn)相同的運(yùn)作。下面就來(lái)看看線(xiàn)程的運(yùn)作情況。
程序開(kāi)始時(shí)同步生成的線(xiàn)程稱(chēng)作main thread。當(dāng)main thread結(jié)束時(shí),其他所有線(xiàn)程以及整個(gè)程序也會(huì)結(jié)束。用戶(hù)的介入所引起的異常也會(huì)被送給main thread。
線(xiàn)程啟動(dòng)時(shí)會(huì)指定一個(gè)塊。當(dāng)這個(gè)塊結(jié)束運(yùn)行時(shí),該線(xiàn)程也會(huì)終結(jié)。塊的結(jié)束既包括正常結(jié)束又包括因錯(cuò)誤等引起的異常結(jié)束。
Ruby的線(xiàn)程調(diào)度采用的是一種帶優(yōu)先順序的循環(huán)調(diào)度法。每隔一段時(shí)間或者當(dāng)運(yùn)行中的線(xiàn)程放棄權(quán)利的時(shí)候,就對(duì)進(jìn)行調(diào)度。從可運(yùn)行的線(xiàn)程中選出優(yōu)先級(jí)別最高的加以運(yùn)行。
當(dāng)某線(xiàn)程發(fā)生異常,且沒(méi)有被rescue捕捉到時(shí),該線(xiàn)程通常會(huì)被無(wú)警告地終止。但是,若有其它線(xiàn)程因?yàn)門(mén)hread#join的關(guān)系一直等待該線(xiàn)程的話(huà),則等待的線(xiàn)程同樣會(huì)被引發(fā)相同的異常。
begin t = Thread.new do Thread.pass # 主線(xiàn)程確實(shí)在等join raise "unhandled exception" end t.join rescue p $! # => "unhandled exception" end
使用下列3個(gè)方法,就可以讓解釋器在某個(gè)線(xiàn)程因異常而終止時(shí)中斷運(yùn)行。
Thread.abort_on_exception
設(shè)置標(biāo)志。
Thread#abort_on_exception
對(duì)指定的線(xiàn)程設(shè)定標(biāo)志。 當(dāng)使用上述3種方法之一后,整個(gè)解釋器就會(huì)被中斷。