什么是線(xiàn)程和進(jìn)程?
進(jìn)程一個(gè)在內(nèi)存中運(yùn)行的應(yīng)用程序。 每個(gè)正在系統(tǒng)上運(yùn)行的程序都是一個(gè)進(jìn)程
線(xiàn)程進(jìn)程中的一個(gè)執(zhí)行任務(wù)(控制單元), 它負(fù)責(zé)在程序里獨(dú)立執(zhí)行。
一個(gè)進(jìn)程至少有一個(gè)線(xiàn)程,一個(gè)進(jìn)程可以運(yùn)行多個(gè)線(xiàn)程,多個(gè)線(xiàn)程可共享數(shù)據(jù)。
進(jìn)程與線(xiàn)程的區(qū)別
根本區(qū)別:進(jìn)程是操作系統(tǒng)資源分配的基本單位,而線(xiàn)程是處理器任務(wù)調(diào)度和執(zhí)行的基本單位
資源開(kāi)銷(xiāo):每個(gè)進(jìn)程都有獨(dú)立的代碼和數(shù)據(jù)空間(程序上下文),程序之間的切換會(huì)有較大的開(kāi)銷(xiāo);線(xiàn)程可以看做輕量級(jí)的進(jìn)程,同一類(lèi)線(xiàn)程共享代碼和數(shù)據(jù)空間,每個(gè)線(xiàn)程都有自己獨(dú)立的運(yùn)行棧和程序計(jì)數(shù)器(PC),線(xiàn)程之間切換的開(kāi)銷(xiāo)小。
包含關(guān)系:如果一個(gè)進(jìn)程內(nèi)有多個(gè)線(xiàn)程,則執(zhí)行過(guò)程不是一條線(xiàn)的,而是多條線(xiàn)(線(xiàn)程)共同完成的;線(xiàn)程是進(jìn)程的一部分,所以線(xiàn)程也被稱(chēng)為輕權(quán)進(jìn)程或者輕量級(jí)進(jìn)程。
內(nèi)存分配:同一進(jìn)程的線(xiàn)程共享本進(jìn)程的地址空間和資源,而進(jìn)程與進(jìn)程之間的地址空間和資源是相互獨(dú)立的
影響關(guān)系:一個(gè)進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對(duì)其他進(jìn)程產(chǎn)生影響,但是一個(gè)線(xiàn)程崩潰有可能導(dǎo)致整個(gè)進(jìn)程都死掉。所以多進(jìn)程要比多線(xiàn)程健壯。
執(zhí)行過(guò)程:每個(gè)獨(dú)立的進(jìn)程有程序運(yùn)行的入口、順序執(zhí)行序列和程序出口。但是線(xiàn)程不能獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線(xiàn)程執(zhí)行控制,兩者均可并發(fā)執(zhí)行