[iOS 多線程 & 網路,ios多線程

來源:互聯網
上載者:User

[iOS 多線程 & 網路,ios多線程
A.進程 什麼是進程
進程是指在系統中正在啟動並執行一個應用程式 每個進程之間是獨立的,每個進程均運行在其專用且受保護的記憶體空間內 比如同時開啟QQ、Xcode,系統就會分別啟動2個進程 通過“活動監視器”可以查看Mac系統中所開啟的進程   B.線程 主線程、子線程佔用記憶體分別是1M和512K 1.什麼是線程
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)重複下載的問題(面試題)    

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.