iOS的多線程技術

來源:互聯網
上載者:User

標籤:

iOS的三種多線程技術                    1.NSThread 每個NSThread對象對應一個線程,量級較輕(真正的多線程)2.以下兩點是蘋果專門開發的“並發”技術,使得程式員可以不再去關心線程的具體使用問題ØNSOperation/NSOperationQueue 物件導向的線程技術ØGCD —— Grand Central Dispatch(派發) 是基於C語言的架構,可以充分利用多核,是蘋果推薦使用的多線程技術 

 

以上這三種編程方式從上到下,抽象度層次是從低到高的,抽象度越高的使用越簡單,也是Apple最推薦使用的,在項目中很多架構技術分別使用了不同多線程技術。 

2.三種多線程技術的對比                     •NSThread:–優點:NSThread 比其他兩個輕量級,使用簡單–缺點:需要自己管理線程的生命週期、線程同步、加鎖、睡眠以及喚醒等。線程同步對資料的加鎖會有一定的系統開銷 •NSOperation:–不需要關心線程管理,資料同步的事情,可以把精力放在自己需要執行的操作上–NSOperation是物件導向的 •GCD:–Grand Central Dispatch是由蘋果開發的一個多核編程的解決方案。iOS4.0+才能使用,是替代NSThread, NSOperation的高效和強大的技術–GCD是基於C語言的

 

3.GCD中有三種隊列類型:

  1. The main queue: 與主線程功能相同。實際上,提交至main queue的任務會在主線程中執行。main queue可以調用dispatch_get_main_queue()來獲得。因為main queue是與主線程相關的,所以這是一個串列隊列。
  2. Global queues: 全域隊列是並發隊列,並由整個進程共用。進程中存在三個全域隊列:高、中(預設)、低三個優先順序隊列。可以調用dispatch_get_global_queue函數傳入優先順序來訪問隊列。
  3. 使用者隊列: 使用者隊列 (GCD並不這樣稱呼這種隊列, 但是沒有一個特定的名字來形容這種隊列,所以我們稱其為使用者隊列) 是用函數 dispatch_queue_create 建立的隊列. 這些隊列是串列的。正因為如此,它們可以用來完成同步機制, 有點像傳統線程中的mutex。

 

串列隊列同步:操作不會建立線程、操作順序執行

串列隊列非同步:操作需要一個子線程,會建立線程、線程的建立和回收不需要程式員參與,操作順序執行,“最安全的選擇”

 

並行隊列同步:操作不會建立線程、操作順序執行

並行隊列非同步:操作會建立多個線程(有多少任務,就開n個線程執行)、操作無序執行;隊列前如果有其他任務,會等待前面的任務完成之後再執行;情境:既不影響主線程,又不需要順序執行的操作!

 

全域隊列非同步:操作會建立多個線程、操作無序執行,隊列前如果有其他任務,會等待前面的任務完成之後再執行。相當於串列隊列。

全域隊列同步:操作不會建立線程、操作順序執行

主隊列非同步:操作都應該在主線程上順序執行的,不存在

 

4,。不同隊列嵌套dispathch_sync(同步)任務的結果:

// 1.全域隊列,都在主線程上執行,不會死結 dispatch_queue_priority_default

dispatch_queue_t q = dispatch_get_global_queue(dispatch_queue_priority_default, 0);

// 2.並行隊列,都在主線程上執行,不會死結 dispatch_queue_concurrent

dispatch_queue_t q = dispatch_queue_create("cn.itcast.gcddemo", dispatch_queue_concurrent);

// 3.串列隊列,會死結,但是會執行嵌套同步操作之前的代碼 dispatch_queue_serial

dispatch_queue_t q = dispatch_queue_create("cn.itcast.gcddemo", dispatch_queue_serial);

// 4.主隊列,直接死結 dispatch_get_main_queue();

dispatch_queue_t q = dispatch_get_main_queue();

dispatch_sync(q, ^{

    nslog(@"同步任務 %@", [nsthread currentthread]);

    dispatch_sync(q, ^{

        nslog(@"同步任務 %@", [nsthread currentthread]);

    });

});

 

iOS的多線程技術

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.