1.線程和進(jìn)程的區(qū)別
進(jìn)程是應(yīng)用程序,是操作系統(tǒng)的基本結(jié)構(gòu),用來管理資源。
線程是程序用來處理任務(wù)的,一個進(jìn)程可以有一個或多個線程。
2.多線程
一個CPU只能同時處理一個線程,但是可以快速切換線程,造成同時處理多個線程的假象。
3.串行隊(duì)列與并發(fā)隊(duì)列
串行是指多個線程按順序執(zhí)行
并發(fā)是指多個線程同時執(zhí)行,其實(shí)就是CPU在多個線程中快速切換
4.同步與異步
同步是指任務(wù)一項(xiàng)接著一項(xiàng)完成,前面一個任務(wù)處理完以后才會處理下一個任務(wù),不開啟新線程。
異步是指同時處理多個任務(wù),互不干擾,開啟新線程。
5.實(shí)現(xiàn)多線程的四種方法
(1)pthread
(2)NSThread
(3)GCD
(4)NSOperation
6.GCD
GCD 是基于NSThread進(jìn)行封裝
GCD 有3中隊(duì)列,全局并發(fā)隊(duì)列 dispatch_get_global_queue(0,0) 主隊(duì)列dispatch_get_main_queue() , 其他隊(duì)列 dispatch_queue_create(0,0)
其中dispatch_get_global_queue(0,0)是全局并發(fā)隊(duì)列,方便使用。并發(fā)隊(duì)列可以同時多個線程一起執(zhí)行、
dispatch_get_main_queue() 是給串行隊(duì)列,用來給主線程用的
dispatch_queue_create(0,0) 可以根據(jù)傳的參數(shù)來確定隊(duì)列是串行隊(duì)列DISPATCH_QUEUE_SERIAL或者并行隊(duì)列DISPATCH_QUEUE_CONCURRENT
所以有3種隊(duì)列,2中線程執(zhí)行方式,就有了6中組合
1.串行同步 —— 任務(wù)一件一件按順序處理,不開啟新的線程
2.串行異步 —— 任務(wù)一件一件按順序處理,開啟新線程
3.并行同步 —— 雖然是并行,但是因?yàn)槭峭降模蝿?wù)仍然按順序進(jìn)行,開啟新的線程
4.并行異步 —— 任務(wù)交叉進(jìn)行,互不干擾,開啟新的線程
5.主隊(duì)列同步 —— 主隊(duì)列比較特殊,由于主隊(duì)列存在一個syncMain的線程,當(dāng)其他線程加進(jìn)隊(duì)列來以后,線程需要等syncMain執(zhí)行完畢才會執(zhí)行新加入的線程,而新線程會等待syncMain處理完畢才會執(zhí)行下一個線程,由此造成線程死鎖進(jìn)而程序崩潰
6.主隊(duì)列異步 —— 任務(wù)交叉進(jìn)行,互不干擾,開啟新的線程
GCD 梳理
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
- 前言 各路大神對GCD的原理解析和使用方法網(wǎng)上到處都是,可以輕松搜索到。那為什么筆者還要自己動手寫一篇所謂的"葵花...
- 原文:http://www.cocoachina.com/ios/20170707/19769.html 本文主要...