多線程

多線程

摘要:線程的總結(jié)

1、基本概念

  • 進程: 當(dāng)前正在運行的應(yīng)用程序,

  • 線程: 應(yīng)用程序執(zhí)行的最基本的單元,一個進程包含多個線程, 一個進程有唯一的主線程

  • 同步: 事件按照順序的執(zhí)行

  • 異步: 多個事件同時執(zhí)行,不是按照順序執(zhí)行;

  • 隊列: 實際上就是一個線程池,把多個子線程加到線程池,由線程池來控制子線程的操作,子線程的執(zhí)行順序,或者暫停等管理的操作:

    • 把線程看做是任務(wù),任務(wù)添加到隊列中,這是操作隊列的用法 NSOperationQueue
  • 并發(fā): 多個事件(線程)同時執(zhí)行

  • 串行: 多個事件(線程)按順序執(zhí)行

  • 進程有多個線程,也有多個隊列

  • 隊列也分為:并發(fā)隊列和串行隊列

2、IOS 線程的對比

①、三種方法的定義與優(yōu)缺點

NSThread

  • 優(yōu)點:相對來說比較簡單
  • 缺點:管理起來比較麻煩:手動管理所有的線程的活動
    • eg:線程的生命周期,同步y(tǒng)ibu,睡眠等等

NSOperation

  • 是一個抽象的類
  • 優(yōu)點:不需要手動的線程管理,它自帶的有線程管理,我們在操作上更注重線程方法的邏輯
  • 缺點: 比較抽象,只能用它實現(xiàn)或定義好的子類 NSInvocationOperation 和 NSBlockOperation

GCD

  • GCD 是Apple公司 開發(fā)的一個多核(雙核處理器)編程的解決方式
  • 優(yōu)點: 效率最高,并發(fā)的缺陷避開掉
  • 缺點: 使用C 語言實現(xiàn)的

②、三種方式的比較

  • 1、簡單的并且封裝成類的時候,使用NSOperation 來實現(xiàn)多線程
  • 2、處理大量的并發(fā)線程,有追求性能時選擇 GCD

③、GCD 的使用

隊列

  • 1、主隊列 :dispatch_get_main_queue(),與主線程功能相同;(刷新UI控件)
  • 全局隊列(也稱并發(fā)隊列):dispatch_get_global_queue()、能夠開多個線程同時運行。
  • 串行隊列 (用戶隊列):dispatch_queue_create(),最多只能開一條線程,執(zhí)行的順序是同步的

任務(wù)(可以用線程來理解)

  • 1、 同步任務(wù):dispath_sync、傳入隊列和代碼塊,按照順序執(zhí)行,不會開啟新線程。
  • 2、異步任務(wù):dispatch_async,傳入的隊列和代碼塊后,要在其他的線程并發(fā)執(zhí)行,根據(jù)任務(wù)的多少,來開啟線程的數(shù)目;

隊列和任務(wù)的組合

  • 主隊列:

    • 同步任務(wù):不開線程,會導(dǎo)致死鎖
    • 異步任務(wù):不開新線程,按順序執(zhí)行
  • 全局隊列 (并發(fā)隊列)

    • 同步任務(wù):不開啟新線程,任務(wù)執(zhí)行按順序執(zhí)行
    • 異步任務(wù):會開啟多個線程,任務(wù)執(zhí)行不是按順序執(zhí)行的
  • 串行隊列(用戶隊列)

    • 同步任務(wù):不會開啟新線程,所有的任務(wù)按順序執(zhí)行
    • 異步任務(wù):只會開啟一條線程,所有的任務(wù)按順序執(zhí)行
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容