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