參考:
Objective-C高級編程
1.線程定義
1個CPU執行的CPU命令列為一條無分叉的路徑。即為線程。
源碼通過編譯器轉換為cpu命令列(二進制代碼)。應用程序啟動后,將cpu的命令列配置到內存中。 cpu從應用程序制定的地址開始,一個一個的執行cpu的命令列。
在OC中的if語句或者for語句等控制語句,或者函數調動的情況下,執行命令的地址會遠離當前位置(位置遷移),但是cpu一次只能執行一個命令,不會分叉。
2.多線程
無分叉的路徑不只1條,存在多條時即為多線程。
一個cpu可以通過上下文切換,并列的執行多個線程。多個cpu也可以并列的執行多個線程。
上下文切換:cpu可以在執行路徑上進行切換,執行中路徑的狀態(如cpu的寄存器信息等)會保存在專用的內存塊中。cpu切換后,可以從專用內存塊中復原路徑信息,繼續執行cpu命令列。
3.優點和問題
1.優點:
使用多線程可以保證應用程序的響應性能。
2.問題:
競態條件(Race Condition)。指兩個或兩個以上線程對共享的數據進行讀寫操作時,最終的數據結果不確定的情況。
死鎖 指兩個或兩個以上的線程或者任務,它們之間互相等待彼此停止執行。
優先倒置(Priority Inverstion)。指低優先級的任務會因為各種原因先于高優先級任務執行。
內存銷毀過大 使用太多線程會消耗大量內存。