線程和進(jìn)程的區(qū)別
線程:
- 1恳谎,線程是進(jìn)程的基本單位,一個(gè)進(jìn)程的所有任務(wù)都在線程中執(zhí)行憋肖。
- 2因痛,進(jìn)程要想執(zhí)行任務(wù),必須得有線程岸更,進(jìn)程至少要有一條線程鸵膏。
- 3,程序啟動(dòng)會(huì)默認(rèn)開啟一條線程怎炊,這條線程被稱為主線程或UI線程较性。
進(jìn)程:
- 1用僧,進(jìn)程是指在系統(tǒng)中正在運(yùn)行的一個(gè)應(yīng)用程序。
- 2赞咙,每個(gè)進(jìn)程之間是獨(dú)立的,每個(gè)進(jìn)程均運(yùn)行在其專用的且受保護(hù)的內(nèi)存空間內(nèi)糟港。
進(jìn)程與線程的關(guān)系
地址空間
:同一進(jìn)程的線程共享本進(jìn)程的地址空間攀操,而進(jìn)程之間則是獨(dú)立的地址空間。
資源擁有
:同一進(jìn)程內(nèi)的線程共享本進(jìn)程的資源如內(nèi)存秸抚、I/O速和、cpu等,但進(jìn)程之間的資源是獨(dú)立的剥汤。
- 1颠放,一個(gè)
進(jìn)程崩潰
后,在保護(hù)模式下吭敢,不會(huì)對其他進(jìn)程產(chǎn)生影響
碰凶,但是一個(gè)線程崩潰
整個(gè)進(jìn)程都死掉,所有多進(jìn)程要比多線程健壯
鹿驼。 - 2欲低,
進(jìn)程切換
時(shí),消耗的資源大畜晰,效率高砾莱,所以涉及到頻繁的切換時(shí),使用線程要好于進(jìn)程凄鼻。 - 3腊瑟,
執(zhí)行過程
:每個(gè)獨(dú)立的進(jìn)程
有一個(gè)程序運(yùn)行的入口
,順序執(zhí)行序列
和程序入口
块蚌。但是線程不能獨(dú)立執(zhí)行
闰非,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制
匈子。 - 4河胎,線程是
處理器調(diào)度
的基本單位,但是進(jìn)程不是虎敦。 - 5游岳,線程沒有地址空間,線程包含在進(jìn)程地址空間中其徙。
多線程是多個(gè)線程同時(shí)在進(jìn)行么胚迫?
時(shí)間片
時(shí)間片
:CPU在多個(gè)任務(wù)直接進(jìn)行快速的切換,這個(gè)時(shí)間間隔就是時(shí)間片唾那。
- 1访锻,對于
單核CPU
,同一時(shí)間,CPU只能處理一個(gè)進(jìn)程期犬。多線程是CPU快速的在多個(gè)線程之間的切換河哑。 - 2,對于
多核CPU
龟虎,具備多個(gè)線程同時(shí)執(zhí)行的條件璃谨。
線程的生命周期
線程的生命周期可分為New、Runnable鲤妥、Running佳吞、Blocked、Dead
這5種狀態(tài)棉安。
- 1底扳,新建線程,線程進(jìn)入
新建
狀態(tài)贡耽。 - 2衷模,當(dāng)線程
start
,線程進(jìn)入就緒(Runable)
狀態(tài)。 - 3菇爪,當(dāng)CPU調(diào)度當(dāng)前線程算芯,線程進(jìn)入
運(yùn)行(Running)
狀態(tài)。 - 4凳宙,當(dāng)CPU調(diào)度其他線程熙揍,線程進(jìn)入
就緒(Runable)
狀態(tài)。 - 5氏涩,線程調(diào)用
sleep
等待同步鎖
届囚,從可調(diào)度線程池移出
,線程進(jìn)入阻塞(Blocked)
狀態(tài)是尖。 - 6意系,
sleep
結(jié)束時(shí),獲得同步鎖
饺汹,重新添加到可調(diào)度線程池
中蛔添。 - 7,線程運(yùn)行結(jié)束兜辞,則會(huì)銷毀迎瞧,死亡(Dead)。
線程的優(yōu)先級(jí)越高逸吵,執(zhí)行越快么凶硅?
不是的,執(zhí)行速度取決于資源的大小(任務(wù)的復(fù)雜度)和CPU的調(diào)度
扫皱。
端口通信
在iOS中足绅,使用NSPort
進(jìn)行通信捷绑,對象須遵守NSMachPortDelegate
協(xié)議,另外氢妈,需要將 兩個(gè)通信對象的端口加到當(dāng)前線程
的runloop
中粹污。