ios多線程知識

來源:互聯網
上載者:User

標籤:style   blog   http   使用   os   io   strong   ar   

一:進程

  進行中中的程式被稱為進程,負責程式啟動並執行記憶體配置 每一個進程都有自己獨立的虛擬記憶體空間

  線程

  線程是進程中一個獨立的執行路徑(控制單元) 一個進程中至少包含一條線程,即主線程 可以將耗時的執行路徑(如:網路請求)放在其他線程中執行 建立線程的目的就是為了開啟一條新的執行路徑,運行指定的代碼,與主線程中的代碼實現同時運行

 

  優勢

  充分發揮多核處理器優勢,將不同線程任務分配給不同的處理器,真正進入“並行運算”狀態 將耗時的任務分配到其他線程執行,由主線程負責統一更新介面會使應用程式更加流暢,使用者體驗更好 當硬體處理器的數量增加,程式會運行更快,而程式無需做任何調整

  弊端 建立線程會消耗記憶體空間和CPU時間,線程太多會降低系統的運行效能

  誤區 多線程技術是為了並發執行多項任務,不會提高單個演算法本身的執行效率

註:多線程實現的幾種方式,在之前隨筆中

二:GCD基本思想

  1)GCD的基本思想是就將操作s放在隊列s中去執行 操作使用Blocks定義 隊列負責調度任務執行所在的線程以及具體的執行時間 隊列的特點是先進先出(FIFO)的,新添加至對列的操作都會排在隊尾

  2)提示 GCD的函數都是以dispatch(指派、調度)開頭的 隊列 dispatch_queue_t 串列隊列,隊列中的任務只會順序執行 並行隊列,隊列中的任務通常會並發執行

  3)操作 dispatch_async 非同步作業,會並發執行,無法確定任務的執行順序 dispatch_sync 同步操作,會依次順序執行,能夠決定任務的執行順序

三:GCD內部怎麼實現的(簡述)

  1> iOS和OS X的核心是XNU核心,GCD是基於XNU核心實現的

  2> GCD的API全部在libdispatch庫中

  3> GCD的底層實現主要有Dispatch Queue和Dispatch Source

   Dispatch Queue :管理block(操作)

   Dispatch Source :處理事件

四:操作

  不同隊列中嵌套dispatch_sync的結果

  // 全域隊列,都在主線程上執行,不會死結 dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

  // 並行隊列,都在主線程上執行,不會死結 dispatch_queue_t q = dispatch_queue_create("cn.itcast.gcddemo", DISPATCH_QUEUE_CONCURRENT);

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

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

  // 直接死結

  dispatch_queue_t q = dispatch_get_main_queue();

  dispatch_sync(q, ^{

      NSLog(@"同步任務 %@", [NSThread currentThread]);

      dispatch_sync(q, ^{ NSLog(@"同步任務 %@", [NSThread currentThread]);

  });

});

 

五:GCD隊列

 

 

總結:

  • 串列隊列,同步任務,不需要建立線程
  • 串列隊列,非同步任務,需要一個子線程,線程的建立和回收不需要程式員參與! “是最安全的一個選擇”串列隊列只能建立!
  • 並行隊列,同步任務,不需要建立線程
  • 並行隊列,非同步任務,有多少個任務,就開N個線程執行
  • 無論什麼隊列和什麼任務,線程的建立和回收不需要程式員參與。 線程的建立回收工作是由隊列負責的
  • “並發”編程,為了讓程式員從負責的線程式控制制中解脫出來!只需要面對隊列和任務!
  • GCD在後端管理著一個線程池,GCD不僅決定著代碼塊將在哪個線程被執行,它還根據可用的系統資源對這些線程進行管理。通過集中的管理線程,緩解大量線程被建立的問題

  • 使用GCD,開發人員可以將工作考慮為一個隊列,而不是一堆線程,這種並行的抽象模型更容易掌握和使用

提示:不建議使用不同優先順序的隊列,因為如果設計不當,可能會出現優先順序反轉,即低優先順序的操作阻塞高優先順序的操作

 

 

 

聯繫我們

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