進(jìn)程:
????????官話:具有一定獨(dú)立功能的程序關(guān)于某個數(shù)據(jù)集合上的一次運(yùn)行活動,進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨(dú)立單位。
????????個人:執(zhí)行程序需要將其裝載到內(nèi)存中,分配一定的資源(內(nèi)存,I/O),以執(zhí)行此程序,基于此,可以說一個進(jìn)程是一次執(zhí)行過程中的程序,是動態(tài)的。操作系統(tǒng)進(jìn)行資源分配的時候只分配到進(jìn)程,這就是獨(dú)立單位的意思。
????????特點(diǎn):進(jìn)程之間是獨(dú)立的,每個進(jìn)程獨(dú)立運(yùn)行在系統(tǒng)分配的特定內(nèi)存空間中,有一切必須的資源去完成執(zhí)行過程.多進(jìn)程在IOS中可能存在于系統(tǒng)中。
線程:
????????官話:線程是程序執(zhí)行流的最小單元,線程是進(jìn)程中的一個實(shí)體,進(jìn)程的所有任務(wù)都在線程中執(zhí)行,線程是 CPU 分配資源和調(diào)度的最小單位.
????????個人:進(jìn)程分配到資源,需要線程去具體執(zhí)行操作,線程因?yàn)檫M(jìn)程存在而存在,因進(jìn)程結(jié)束而結(jié)束,一個進(jìn)程至少有一個主線程。進(jìn)程和線程是一對多的關(guān)系,一個進(jìn)程可以對應(yīng)不止一個線程,一個線程只能對應(yīng)一個進(jìn)程。
聯(lián)系:
????????1.線程是進(jìn)程具體執(zhí)行單元,所有進(jìn)程的任務(wù)都要通過線程來實(shí)現(xiàn)。
????????2.一個程序可以有多個進(jìn)程(多進(jìn)程),一個進(jìn)程可以有多個線程,而且至少必須有一個線程。
????????3.同一進(jìn)程內(nèi)的線程共享進(jìn)程資源,單個線程的崩潰不必然導(dǎo)致進(jìn)程的崩潰,除非其他線程訪問該崩潰線程的內(nèi)存。
區(qū)別:
????????1.進(jìn)程獨(dú)享地址空間,線程則與同一進(jìn)程下的其他線程共享地址空間。
????????2.進(jìn)程因?yàn)槠洫?dú)立性,在保護(hù)模式下,即使崩潰也不會對其他進(jìn)程產(chǎn)生影響。而線程的崩潰則可能會導(dǎo)致其他線程崩潰,IOS中主線程的崩潰導(dǎo)致整個進(jìn)程崩潰。
????????3.線程是處理器調(diào)度的基本單元,進(jìn)程不是。
????????4.線程切換的速度要比進(jìn)程快得多,因?yàn)槠滟Y源開銷小得多。
????????5.在IOS中,因?yàn)榫€程之間共享全局變量、靜態(tài)變量,因此線程之間的通訊要比進(jìn)程方便很多。
????????6.線程基于進(jìn)程存在而存在,因此進(jìn)程可以單獨(dú)執(zhí)行,線程則必須依賴于進(jìn)程而執(zhí)行。
多線程:
????????官話:一個進(jìn)程可以同時執(zhí)行多個線程,這些線程之間并發(fā)執(zhí)行,完成不同的任務(wù)。
????????個人:一個程序需要同時處理不同的任務(wù),而這些任務(wù)可以并發(fā)執(zhí)行,通過創(chuàng)建多個線程來同時執(zhí)行任務(wù),提高程序的執(zhí)行效率,避免等待。
????????優(yōu)點(diǎn):
??????????????1.提高程序執(zhí)行效率,減少無謂等待,
??????????????2.多線程可以提高資源的利用率(CPU,內(nèi)存等等)。
????????缺點(diǎn):
??????????????1.提高程序復(fù)雜度。
??????????????2.因?yàn)榫€程之間共享資源,因此一旦多個線程需要訪問同一個資源時,很可能會帶來數(shù)據(jù)錯亂和數(shù)據(jù)丟失等安全問題,容易得不償失,雖然互斥鎖可以在一定程度上解決這個問題,但是會提高CPU消耗。