NSThread 砂轻,GCD奔誓,NSOperation 多線程

GCD

1、創(chuàng)建GCD任務的方式有

1搔涝、dispatch_async(異步執(zhí)行)

2厨喂、dispatch_sync (同步執(zhí)行)

2、創(chuàng)建GCD任務時需要加入到隊列中執(zhí)行庄呈。GCD中的隊列有

1杯聚、串行隊列

2、并行隊列

3抒痒、主隊列 (GCD自帶的一種特殊的串行隊列)

幌绍。所有放在主隊列中的任務,都會放到主線程中執(zhí)行

故响】悖可使用dispatch_get_main_queue()獲得主隊列

3、創(chuàng)建GCD有6種不同的組合方式

1彩届、同步執(zhí)行 + 串行隊列? (不會開啟新線程伪冰,在當前線程執(zhí)行任務。任務是串行的樟蠕,執(zhí)行完一個任務贮聂,再執(zhí)行下一個任務。)

2寨辩、同步執(zhí)行 + 并行隊列 (特點:在當前線程中執(zhí)行任務吓懈,不會開啟新線程,執(zhí)行完一個任務靡狞,再執(zhí)行下一個任務耻警。)

3、同步執(zhí)行 + 主隊列 (同步執(zhí)行 + 主隊列在不同線程中調用結果也是不一樣甸怕,在主線程中調用會出現死鎖甘穿,而在其他線程中則不會。在其他線程中梢杭,不會開啟新線程温兼,執(zhí)行完一個任務,再執(zhí)行下一個任務)

4武契、異步執(zhí)行 + 串行隊列? ?(會開啟新線程募判,但是因為任務是串行的缸榛,執(zhí)行完一個任務,再執(zhí)行下一個任務)

5兰伤、異步執(zhí)行 + 并行隊列 ( 特點:可以開啟多個線程内颗,任務交替(同時)執(zhí)行。)

6敦腔、異步執(zhí)行 + 主隊列? ?(只在主線程中執(zhí)行任務均澳,執(zhí)行完一個任務,再執(zhí)行下一個任務符衔。)


異步執(zhí)行一個串行隊列的時候找前,開啟一個新線程01,多次調用后判族,只在新線程01內執(zhí)行躺盛。

異步一個并行隊列,開啟一個新的線程01形帮,多次調用后槽惫,開啟不同的新線程02,線程03.....辩撑。

同步執(zhí)行一個串行隊列時界斜,沒有開啟新線程,如果在queue所在的線程上開啟會造成死鎖合冀。

同步一個并行隊列各薇,沒有開啟新線程。

4君躺、GCD的其他方法

4.1峭判、dispatch_apply GCD 快速迭代方法

通常我們會用 for 循環(huán)遍歷,但是 GCD 給我們提供了快速迭代的函數dispatch_apply棕叫。dispatch_apply按照指定的次數將指定的任務追加到指定的隊列中林螃,并等待全部隊列執(zhí)行結束。

dispatch_queue_t applyQueue = dispatch_queue_create("com.laxton.applyQueue", DISPATCH_QUEUE_CONCURRENT);

? ? size_tcount =10;

? ? //如果是串行隊列循環(huán)執(zhí)行全部在主線程上谍珊。如果在并發(fā)隊列中開啟新的線程循環(huán)執(zhí)行治宣。

? ? dispatch_apply(count, applyQueue, ^(size_ti) {

? ? ? ? NSLog(@"循環(huán)執(zhí)行第%li次 %@",i,[NSThreadcurrentThread]);

? ? });

4.2?GCD 柵欄方法:dispatch_barrier_async

在執(zhí)行完柵欄前面的操作之后急侥,才執(zhí)行柵欄操作砌滞,最后再執(zhí)行柵欄后邊的操作。

4.3?dispatch_group_wait

暫停當前線程(阻塞當前線程)坏怪,等待指定的 group 中的任務執(zhí)行完成后贝润,才會往下繼續(xù)執(zhí)行。

4.4??dispatch_group_enter铝宵、dispatch_group_leave

從dispatch_group_enter打掘、dispatch_group_leave相關代碼運行結果中可以看出:當所有任務執(zhí)行完成之后华畏,才執(zhí)行 dispatch_group_notify 中的任務。這里的dispatch_group_enter尊蚁、dispatch_group_leave組合亡笑,其實等同于dispatch_group_async。

作者:行走的少年郎

鏈接:http://www.reibang.com/p/2d57c72016c6

來源:簡書

著作權歸作者所有横朋。商業(yè)轉載請聯系作者獲得授權仑乌,非商業(yè)轉載請注明出處。

NSOperation

系統提供兩種Operation

1琴锭、NSInvocationOperation 加入隊列后開啟新線程執(zhí)行任務

NSInvocationOperation*invocationOperation = [[NSInvocationOperationalloc]initWithTarget:selfselector:@selector(loadImageSource:)object:@"imageUrl"];

? ? NSOperationQueue *queue = [[NSOperationQueue alloc] init];

? ? [queueaddOperation:invocationOperation];

2晰甚、NSBlockOperation?加入隊列后開啟新線程執(zhí)行任務

NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{

? ? ? ? [self loadImageSource:@"www."];

? ? }];

? ? [queueaddOperation:blockOperation];

NSOperation 與 CGD相比

1、可以設置兩個任務之間的依賴

2决帖、可以設置一個任務在隊列中的優(yōu)先級

3厕九、可以設置隊列的最大并發(fā)數。(允許同時進行幾個任務)

NSThread

優(yōu)點:

1地回、(有幾個屬性BOOL executing扁远,BOOL?finished,BOOL cancelled)可以檢查到線程的狀態(tài)刻像。

2穿香、(有方法 - (void)cancel,- (void)start绎速, + (void)exit;)來操作線程開始和取消跟退出皮获。

3、輕量級纹冤,是真正的多線程洒宝。

4、(+ (BOOL)setThreadPriority:(double)p;)可以設置線程優(yōu)先級萌京。

缺點:

1雁歌、要自己手動管理線程生命周期,不支持多核知残。

CGD

優(yōu)點:

支持多核靠瞎,高效,使用簡便不需要管理線程周期

缺點:

1求妹、不能檢測到線程狀態(tài)乏盐。

2、不能設置線程優(yōu)先級制恍。

3父能、線程數不可控。

NSOperation

優(yōu)點:

1净神、(有屬性:BOOL cancelled何吝,BOOL executing溉委,BOOL finished)可以檢測到任務的狀態(tài)。

2爱榕、(有方法- (void)cancel瓣喊,如果你的操作已經執(zhí)行,它不會讓你的任務立即停止黔酥,只是更新任務的內部標志型宝,如果操作還沒有執(zhí)行,則取消隊列里的操作絮爷,如果操作已經完成趴酣,則此方法沒有任何效果)

3、(有方法- (void)addDependency:(NSOperation*)op;- (void)removeDependency:(NSOperation*)op;)添加依賴刪除依賴坑夯。)

4岖寞、(有屬性NSOperationQueuePriority queuePriority;)可以設置操作優(yōu)先級

5、(可以添加到NSOperationQueue中實現并發(fā)執(zhí)行柜蜈,NSOperationQueue 屬性maxConcurrentOperationCount可以設置可以同時執(zhí)行的最大操作數)

缺點:

是抽象類仗谆,要創(chuàng)建子類才能使用。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末淑履,一起剝皮案震驚了整個濱河市隶垮,隨后出現的幾起案子,更是在濱河造成了極大的恐慌秘噪,老刑警劉巖狸吞,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異指煎,居然都是意外死亡蹋偏,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門至壤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來威始,“玉大人,你說我怎么就攤上這事像街±杼模” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵镰绎,是天一觀的道長脓斩。 經常有香客問我,道長跟狱,這世上最難降的妖魔是什么俭厚? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮驶臊,結果婚禮上挪挤,老公的妹妹穿的比我還像新娘。我一直安慰自己关翎,他們只是感情好扛门,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著纵寝,像睡著了一般论寨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上爽茴,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天葬凳,我揣著相機與錄音,去河邊找鬼室奏。 笑死火焰,一個胖子當著我的面吹牛,可吹牛的內容都是我干的胧沫。 我是一名探鬼主播昌简,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼绒怨!你這毒婦竟也來了纯赎?” 一聲冷哼從身側響起冀惭,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤冰抢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后驹尼,有當地人在樹林里發(fā)現了一具尸體六剥,經...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡佑附,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了仗考。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片音同。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖秃嗜,靈堂內的尸體忽然破棺而出权均,到底是詐尸還是另有隱情,我是刑警寧澤锅锨,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布叽赊,位于F島的核電站,受9級特大地震影響必搞,放射性物質發(fā)生泄漏必指。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一恕洲、第九天 我趴在偏房一處隱蔽的房頂上張望塔橡。 院中可真熱鬧梅割,春花似錦、人聲如沸葛家。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽癞谒。三九已至底燎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間弹砚,已是汗流浹背双仍。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留桌吃,地道東北人朱沃。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像读存,于是被迫代替她去往敵國和親为流。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內容