主線程的作用:
- 顯示\刷新UI界面
- 處理UI界面(比如點擊事件析显、滾動事件鲫咽、拖曳事件等)
優(yōu)缺點:
- 優(yōu)點:
- 能適當(dāng)提高程序的執(zhí)行效率
- 能適當(dāng)提高資源利用率(CPU、內(nèi)存利用率)
- 缺點:
- 創(chuàng)建線程需要開銷叫榕,iOS下主要成本包括:
- 內(nèi)核數(shù)據(jù)結(jié)構(gòu)(大約1KB)浑侥、棧空間(子線程512KB晰绎、主線程1MB寓落、也可以使用-setStackSize:設(shè)置,但必須是4K的倍數(shù)荞下,而且最小是16K)伶选,創(chuàng)建線程大約需要90毫秒的創(chuàng)建時間
- 如果開啟大量線程,會降低程序性能(iOS移動端尖昏,2-3條線程適宜)
- 線程越多仰税,CPU在調(diào)度線程上的開銷就越大
- 程序設(shè)計更復(fù)雜:比如線程之間的通信、多線程的數(shù)據(jù)共享
實現(xiàn)方案
技術(shù)方案 簡介 語言 線程生命周期 使用頻率 pthread 1. 一套通用的多線程API
2. 適用于Unix\Linux\Windows等系統(tǒng)
3. 跨平臺\可移植
4. 使用難度最大C 程序員管理 幾乎不用 NSTread 1. 使用更加面向?qū)ο?br> 2. 簡單易用抽诉,可直接操作線程對象 OC 程序員管理 偶爾使用 GCD 1. 旨在替代NSTread等線程技術(shù)
2. 充分利用設(shè)備的多核C 自動管理 經(jīng)常使用 NSOperation 1. 基于GCD(底層是GCD)
2. 比GCD多了一些更簡單實用的功能
3. 使用更加面向?qū)ο?/td>OC 自動管理 經(jīng)常使用
線程的狀態(tài)
線程狀態(tài)
線程只有在
可調(diào)度線程池
中陨簇,才可以被執(zhí)行,未銷毀且不在可調(diào)度線程池
中的線程迹淌,意味該線程處于“阻塞”狀態(tài)河绽;銷毀了的線程也將在可調(diào)度線程池
中消失
線程安全
線程安全分析
線程安全解決方案:互斥鎖
互斥鎖:使用的是
線程同步
技術(shù)
線程同步:多條線程在同一條線程上執(zhí)行(按順序執(zhí)行任務(wù))
@synchronized(鎖對象) {//需要鎖定的代碼}```
移動端盡量使用nonatomic(非原子屬性,非線程安全)唉窃,盡量將加鎖耙饰、資源搶奪的業(yè)務(wù)邏輯交給服務(wù)器端的護(hù)理,減少移動端的壓力
###線程之間通信的一種比較古老經(jīng)典且復(fù)雜的方法:通過NSPort對象進(jìn)行訪問
每個線程都有一個RunLoop纹份,每個RunLoop都有Port對象(NSMessagePort\NSMachPort\...),線程A想訪問線程B苟跪,B會返回一個Port(NSMachPort)對象讓A擁有廷痘,A將通過這個Port去訪問B
![線程間通過NSPort對象進(jìn)行訪問](http://upload-images.jianshu.io/upload_images/1366387-d2605e5ac98a846c.jpeg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)