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