標籤:import 應用程式 dispatch sel display 檔案 子線程 margin alt
郝萌主傾心貢獻,尊重作者的勞動成果,請勿轉載。
假設文章對您有所協助,歡迎給作者捐贈。支援郝萌主,捐贈數額任意,重在心意^_^
我要捐贈: 點擊捐贈
Cocos2d-X原始碼下載:點我傳送
遊戲官方下載:http://dwz.cn/RwTjl
遊戲視頻預覽:http://dwz.cn/RzHHd
遊戲開發部落格:http://dwz.cn/RzJzI
遊戲原始碼傳送:http://dwz.cn/Nret1
A.進程什麼是進程
進程是指在系統中正在啟動並執行一個應用程式每一個進程之間是獨立的。每一個進程均運行在其專用且受保護的記憶體空間內比方同一時候開啟QQ、Xcode,系統就會分別啟動2個進程通過“活動監視器”能夠查看Mac系統中所開啟的進程 B.線程主線程、子線程佔用記憶體各自是1M和512K1.什麼是線程
1個進程要想運行任務。必須得有線程(每1個進程至少要有1條線程)線程是進程的基本運行單元。一個進程(程式)的全部任務都線上程中運行比方使用酷狗播放音樂、使用迅雷下載電影。都須要線上程中運行 2.線程的串列1個線程中任務的運行是串列的
假設要在1個線程中運行多個任務。那麼僅僅能一個一個地按順序運行這些任務也就是說,在同一時間內,1個線程僅僅能運行1個任務比方在1個線程中下載3個檔案(各自是檔案A、檔案B、檔案C) 3.多線程什麼是多線程
1個進程中能夠開啟多條線程。每條線程能夠並行(同一時候)運行不同的任務
進程 車間,線程 車間工人多線程技術能夠提高程式的運行效率比方同一時候開啟3條線程分別下載3個檔案(各自是檔案A、檔案B、檔案C) 4.多線程原理多線程的原理
同一時間,CPU僅僅能處理1條線程。僅僅有1條線程在工作(運行)
多線程並發(同一時候)運行,事實上是CPU高速地在多條線程之間調度(切換)
假設CPU調度線程的時間足夠快,就造成了多線程並發啟動並執行假象
思考:假設線程很許多,會發生什麼情況?
CPU會在N多線程之間調度。CPU會累死,消耗大量的CPU資源
每條線程被調度啟動並執行頻次會減少(線程的運行效率減少) 5.多線程的優缺點多線程的長處
能適當提高程式的運行效率
能適當提高資源使用率(CPU、記憶體利用率)
多線程的缺點
開啟線程須要佔用一定的記憶體空間(預設情況下,主線程佔用1M,子線程佔用512KB),假設開啟大量的線程。會佔用大量的記憶體空間,減少程式的效能
線程越多,CPU在調度線程上的開銷就越大
程式設計更加複雜:比方線程之間的通訊、多線程的資料共用 6.主線程什麼是主線程
一個iOS程式運行後。預設會開啟1條線程。稱為“主線程”或“UI線程”
主線程的主要作用
顯示\重新整理UI介面
處理UI事件(比方點擊事件、滾動事件、拖拽事件等)
主線程的使用注意
別將比較耗時的操作放到主線程中耗時操作會卡住主線程。嚴重影響UI的流暢度,給使用者一種“卡”的壞體驗 7.iOS多線程實現技術
- pthread
- NSThread
- GCD
- NSOperation
C.須要掌握的多線程
1.NSThread
1> 開線程的幾種方式
* 先建立,後啟動
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
[thread start];
* 直接啟動
[NSThread detachNewThreadSelector:@selector(run) toTarget:self withObject:nil];
[self performSelectorInBackground:@selector(run) withObject:nil];
2> 其它使用方法
NSThread *current = [NSThread currentThread];
+ (NSThread *)mainThread; // 獲得主線程
3> 線程間通訊
performSelectorOnMainThread.....
2.GCD(重點)
1> 隊列的類型
* 並發隊列
獲得全域的並發隊列: dispatch_get_global_queue
* 串列隊列
a.自己建立
dispatch_queue_create
b.主隊列
dispatch_get_main_queue
2> 運行任務的方法類型
* 同步(sync)運行
* 非同步(async)運行
3> 瞭解隊列和方法的配合使用
4> 線程間通訊
dispatch_async(
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 運行耗時的非同步作業...
dispatch_async(dispatch_get_main_queue(), ^{
// 回到主線程。運行UI重新整理操作
});
});
5> 其它使用方法
dispatch_once
dispatch_after
dispatch_group_async\dispatch_group_notify
3.NSOperation
1> 基本使用
NSInvocationOperation
NSBlockOperation
2> NSOperationQueue(重點)
* 最大並發數設定- (void)setMaxConcurrentOperationCount:(NSInteger)cnt; 注意:此方法僅能限制同一時候啟動並執行線程數。不能限制特定的線程(就可以能每次啟動並執行線程組都是不一樣的) * 設定依賴
[operationB addDependency:operationA]; // 操作B依賴於操作A
3> 自己定義Operation(瞭解基本流程)
4> 怎樣解決一張圖片(一個url)反覆下載的問題
郝萌主傾心貢獻,尊重作者的勞動成果。請勿轉載。
假設文章對您有所協助。歡迎給作者捐贈,支援郝萌主,捐贈數額任意,重在心意^_^
我要捐贈: 點擊捐贈
Cocos2d-X原始碼下載:點我傳送
遊戲官方下載:http://dwz.cn/RwTjl
遊戲視頻預覽:http://dwz.cn/RzHHd
遊戲開發部落格:http://dwz.cn/RzJzI
遊戲原始碼傳送:http://dwz.cn/Nret1
iOS多線程與網路開發之多線程概述