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