1. 建立執行緒的平均開銷:
記憶體堆疊: 主線程—— 1m , 子執行緒——512k
2. 建立執行緒的多種方法:
nsthread, posix(基於c語言支援的api), nsobject的performselector
3. 在工程沒有使用arc時,執行緒執行體**中建立自動釋放池
5. runloop: 執行緒中的乙個事件處理迴圈,用來不停的排程工作以及處理輸入事件.
每乙個執行緒都有自己的runloop, 主線程是預設開啟的,子執行緒是需要手動開啟。
runloop監視每個輸入源,處理事件,如果沒有事件,runloop休眠,不消耗cpu資源
需要使用runloop的四種情況: a.
使用埠或自定義輸入源和其他執行緒通訊
b.子執行緒中使用了定時器
c.cocoa中使用任何performselector到了執行緒中執行方法
d.使執行緒履行週期性任務
在子執行緒中用了nsurlconnection非同步請求,那也需要用到runloop,不然執行緒退出了,相應的delegate方法就不能觸發。
6. 執行緒同步: a. 原子操作
b. 記憶體屏障和volatile變數
記憶體屏障: 確保記憶體操作按照正確順序工作的非阻塞同步工具
volatile : 一般編譯器會優化**通重載入這些變數的值進入暫存器。 對於執行緒之間共享的變數,使用volatile強制編譯器每次都從記憶體讀取資料,確保資料的同步。
c. 鎖: mutex, @synchronized()指令
d. 訊號量
7. 執行緒安全設計技巧
a. 完全避免資料同步(可能性比較小)
b. 了解同步的限制
c. 注意對**正確性的威脅(保證資料同步安全,以及防止執行緒死鎖)
d. 盡量只使用乙個鎖進行資料同步保護,避免產生死鎖
e. 使用執行緒同步工具,
原子操作
鎖: 使用posix, nslock(lock,unlock, trylock), @synchronized()指令,包含隱式的異常處理例程來保護**,發生異常會釋放資源。
8. 執行緒安全總結:
a. 不可改變的物件,通常是執行緒安全的
b. 主線程負責處理響應事件
執行緒安全的類和函式: nsarray, nsdata, nsnumber.....
非執行緒安全: nsbundle, nscoder, nsarchiver, nsmutablearray
iOS多執行緒程式設計 執行緒同步總結
1 原子操作 osatomic系列函式 ios平台下的原子操作函式都以osatomic開頭,使用時需要包含標頭檔案。不同執行緒如果通過原子操作函式對同一變數進行操作,可以保證乙個執行緒的操作不會影響到其他執行緒內對此變數的操作,因為這些操作都是原子式的。因為原子操作只能對內建型別進行操作,所以原子操...
iOS多執行緒程式設計 執行緒同步總結
1 原子操作 osatomic系列函式 ios平台下的原子操作函式都以osatomic開頭,使用時需要包含標頭檔案。不同執行緒如果通過原子操作函式對同一變數進行操作,可以保證乙個執行緒的操作不會影響到其他執行緒內對此變數的操作,因為這些操作都是原子式的。因為原子操作只能對內建型別進行操作,所以原子操...
iOS多執行緒程式設計入門
程序 執行緒 區 import inte ce viewcontroller uiviewcontroller end 複製 補充說明 補充一點 如果我們的程式中 出現了多個執行緒競爭同乙個資源的情況,這個時候 我們需要對這個資源進行同步保護 synchronized 讓執行緒處於乙個排隊狀態 當乙...