iOS的三種多線程技術(shù)
1.NSThread 每個(gè)NSThread對象對應(yīng)一個(gè)線程卷胯,量級較輕(真正的多線程)
2.以下兩點(diǎn)是蘋果專門開發(fā)的“并發(fā)”技術(shù)子刮,使得程序員可以不再去關(guān)心線程的具體使用問題
NSOperation/NSOperationQueue 面向?qū)ο蟮木€程技術(shù)
GCD —— Grand Central Dispatch(派發(fā)) 是基于C語言的框架,可以充分利用多核,是蘋果推薦使用的多線程技術(shù)
以上這三種編程方式從上到下挺峡,抽象度層次是從低到高的葵孤,抽象度越高的使用越簡單,也是Apple最推薦使用的橱赠,在項(xiàng)目中很多框架技術(shù)分別使用了不同多線程技術(shù)尤仍。
2.三種多線程技術(shù)的對比
?NSThread:
–優(yōu)點(diǎn):NSThread 比其他兩個(gè)輕量級,使用簡單
–缺點(diǎn):需要自己管理線程的生命周期狭姨、線程同步宰啦、加鎖、睡眠以及喚醒等饼拍。線程同步對數(shù)據(jù)的加鎖會(huì)有一定的系統(tǒng)開銷
?NSOperation:
–不需要關(guān)心線程管理赡模,數(shù)據(jù)同步的事情,可以把精力放在自己需要執(zhí)行的操作上
–NSOperation是面向?qū)ο蟮?/p>
?GCD:
–Grand Central Dispatch是由蘋果開發(fā)的一個(gè)多核編程的解決方案师抄。iOS4.0+才能使用漓柑,是替代NSThread, NSOperation的高效和強(qiáng)大的技術(shù)
–GCD是基于C語言的
Dispatch Queues
GCD的基本概念就是dispatch queue叨吮。dispatch queue是一個(gè)對象辆布,它可以接受任務(wù),并將任務(wù)以先到先執(zhí)行的順序來執(zhí)行挤安。dispatch queue可以是并發(fā)的或串行的谚殊。并發(fā)任務(wù)會(huì)像NSOperationQueue那樣基于系統(tǒng)負(fù)載來合適地并發(fā)進(jìn)行,串行隊(duì)列同一時(shí)間只執(zhí)行單一任務(wù)蛤铜。
GCD中有三種隊(duì)列類型:
__The main queue: __與主線程功能相同嫩絮。實(shí)際上,提交至main queue的任務(wù)會(huì)在主線程中執(zhí)行围肥。main queue可以調(diào)用dispatch_get_main_queue()來獲得剿干。因?yàn)閙ain queue是與主線程相關(guān)的,所以這是一個(gè)串行隊(duì)列穆刻。
__Global queues: __全局隊(duì)列是并發(fā)隊(duì)列置尔,并由整個(gè)進(jìn)程共享。進(jìn)程中存在三個(gè)全局隊(duì)列:高氢伟、中(默認(rèn))榜轿、低三個(gè)優(yōu)先級隊(duì)列《渎啵可以調(diào)用dispatch_get_global_queue函數(shù)傳入優(yōu)先級來訪問隊(duì)列谬盐。
用戶隊(duì)列: 用戶隊(duì)列 (GCD并不這樣稱呼這種隊(duì)列, 但是沒有一個(gè)特定的名字來形容這種隊(duì)列,所以我們稱其為用戶隊(duì)列) 是用函數(shù) dispatch_queue_create 創(chuàng)建的隊(duì)列. 這些隊(duì)列是串行的诚些。
詳細(xì)介紹:這里