參考:
Objective-C高級(jí)編程
1.線(xiàn)程定義
1個(gè)CPU執(zhí)行的CPU命令列為一條無(wú)分叉的路徑。即為線(xiàn)程。
源碼通過(guò)編譯器轉(zhuǎn)換為cpu命令列(二進(jìn)制代碼)。應(yīng)用程序啟動(dòng)后,將cpu的命令列配置到內(nèi)存中。 cpu從應(yīng)用程序制定的地址開(kāi)始,一個(gè)一個(gè)的執(zhí)行cpu的命令列。
在OC中的if語(yǔ)句或者for語(yǔ)句等控制語(yǔ)句,或者函數(shù)調(diào)動(dòng)的情況下,執(zhí)行命令的地址會(huì)遠(yuǎn)離當(dāng)前位置(位置遷移),但是cpu一次只能執(zhí)行一個(gè)命令,不會(huì)分叉。

2.多線(xiàn)程
無(wú)分叉的路徑不只1條,存在多條時(shí)即為多線(xiàn)程。
一個(gè)cpu可以通過(guò)上下文切換,并列的執(zhí)行多個(gè)線(xiàn)程。多個(gè)cpu也可以并列的執(zhí)行多個(gè)線(xiàn)程。
上下文切換:cpu可以在執(zhí)行路徑上進(jìn)行切換,執(zhí)行中路徑的狀態(tài)(如cpu的寄存器信息等)會(huì)保存在專(zhuān)用的內(nèi)存塊中。cpu切換后,可以從專(zhuān)用內(nèi)存塊中復(fù)原路徑信息,繼續(xù)執(zhí)行cpu命令列。
3.優(yōu)點(diǎn)和問(wèn)題
1.優(yōu)點(diǎn):
使用多線(xiàn)程可以保證應(yīng)用程序的響應(yīng)性能。
2.問(wèn)題:
競(jìng)態(tài)條件(Race Condition)。指兩個(gè)或兩個(gè)以上線(xiàn)程對(duì)共享的數(shù)據(jù)進(jìn)行讀寫(xiě)操作時(shí),最終的數(shù)據(jù)結(jié)果不確定的情況。
死鎖 指兩個(gè)或兩個(gè)以上的線(xiàn)程或者任務(wù),它們之間互相等待彼此停止執(zhí)行。
優(yōu)先倒置(Priority Inverstion)。指低優(yōu)先級(jí)的任務(wù)會(huì)因?yàn)楦鞣N原因先于高優(yōu)先級(jí)任務(wù)執(zhí)行。
內(nèi)存銷(xiāo)毀過(guò)大 使用太多線(xiàn)程會(huì)消耗大量?jī)?nèi)存。