OC開發_整理筆記——多線程之GCD

 

1、進程和線程  多線程

  

 

2、各類隊列!併發

  一、GCD:Grand Central Dispatch異步

  二、串行隊列(Serial)async

        你 能夠建立任意個數的串行隊列,每一個隊列依次執行添加的任務, 一個隊列同一時刻只能執行一個任務(串行),可是各個隊列之間不影響,能夠併發執行。每一個隊列中的任務運行在一個由各自串行隊列    維護的獨立線程上, 一個隊列中只有一個線程

  三、並行隊列(Concurrent)spa

        並行隊列是 不容許本身建立的,系統中存在三個不一樣優先級的並行隊列。並行隊列依舊按照任務添加的順序啓動任務,可是,後一個任務無須等待前一個任務執行完畢,而是啓動第一個任務後,當即啓動    下一個任務。至於同一時刻容許同時運行多少個任務由 系統決定。任務各自運行在並行隊列爲他們提供的獨立線程上, 並行隊列中同時運行多少個任務,就必須維護多少個線程

  四、主調度隊列(main dispatch queue)線程

        主調度隊列中的任務運行在應用程序 主線程上,因此,若是你要修改應用程序的界面,他是惟一的選擇
 
  五、全局隊列(蘋果爲了方便多線程的設計,提供一個全局隊列,供 全部的APP共同使用

 

3、隊列的任務處理設計

  一、串行隊列(✅DISPATCH_QUEUE_SERIAL)的同步任務和異步任務:dispatch_sync 和 dispatch_async 3d

      

  #串行同步執行結果:不會建立新線程,按照 順序執行blog

   

  #串行異步執行結果:建立了一個新線程,可是依然按照 順序執行隊列

  

  #串行先執行異步,再執行同步的結果:發現同步一直是在主線程,但也是先讓異步的執行完再來執行同步的,

   從而說明一個串行隊列是順序執行的,可是也不影響主線程的操做

  

  二、並行隊列(✅DISPATCH_QUEUE_CONCURRENT)的同步任務和異步任務:dispatch_sync 和 dispatch_async 

    

  #並行同步執行結果:不會建立新線程,按照 順序執行[同串行同步]

  #並行異步執行結果:會新建多個線程、操做無序執行(有⽤,容易出錯!)隊列前若是有其餘任務,會等待前面的任務完成以後再執⾏

              場景:既不影響主線程,又不須要順序執⾏行的操做!

 

  

  #並行先執行同步,再執行異步的結果:發現同步執行完纔會執行異步

  #並行先執行異步,再執行同步的結果:順序已經徹底各類亂入了!

  

  三、全局隊列(DISPATCH_QUEUE_PRIORITY_DEFAULT):開發中用這個就對了dispatch_get_global_queue

  

  #全局隊列先執行同步,再執行異步的結果:實際上結果是和並列的都同樣的效果

  

  四、主線程隊列:dispatch_get_main_queue[主隊列中添加的同步操做永遠不會被執⾏行,會死鎖]

  

 

4、嵌套同步任務

  一、在串行隊列中嵌套多一個同步任務,會形成阻塞!!

   

5、小結一下

  一、並行和串行的任務調度的區別

  

相關文章
相關標籤/搜索