多線程
摘要:線程的總結(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í)行