任務(wù)、進(jìn)程和線(xiàn)程的不同
進(jìn)程(process)常常被定義為程序的執行??梢园岩粋€(gè)進(jìn)程看成是一個(gè)獨立的程序,在內存中有其完備的數據空間和代碼空間。一個(gè)進(jìn)程所擁有的數據和變量只屬于它自己。
線(xiàn)程(tread)則是某一進(jìn)程中一路單獨運行的程序。也就是說(shuō),線(xiàn)程存在于進(jìn)程之中。一個(gè)進(jìn)程由一個(gè)或多個(gè)線(xiàn)程構成,各線(xiàn)程共享相同的代碼和全局數據,但各有其自己的堆棧。由于堆棧是每個(gè)線(xiàn)程一個(gè),所以局部變量對每一線(xiàn)程來(lái)說(shuō)是私有的。由于所有線(xiàn)程共享同樣的代碼和全局數據,它們比進(jìn)程更緊密,比單獨的進(jìn)程間更趨向于相互作用,線(xiàn)程間的相互作用更容易些,因為它們本身就有某些供通信用的共享內存:進(jìn)程的全局數據。
一個(gè)進(jìn)程和一個(gè)線(xiàn)程最顯著(zhù)的區別是:線(xiàn)程有自己的全局數據。線(xiàn)程存在于進(jìn)程中,因此一個(gè)進(jìn)程的全局變量由所有的線(xiàn)程共享。由于線(xiàn)程共享同樣的系統區域,操作系統分配給一個(gè)進(jìn)程的資源對該進(jìn)程的所有線(xiàn)程都是可用的,正如全局數據可供所有線(xiàn)程使用一樣。
在20世紀60年代初期,麻省理工學(xué)院的MULTICS操作系統中首先引入“進(jìn)程”這個(gè)概念,IBM公司的CTSS/360系統中則使用“任務(wù)”這個(gè)術(shù)語(yǔ)?!熬€(xiàn)程”概念的出現就更晚了。
評論