iOS-淺談并發(fā)任務(wù)GCD信號量與其替代品Bolts(Facebook出品)

很多從事iOS開發(fā)過程當(dāng)中很少聽到信號量,也很少用到,但是這個在小編看來是非常重要的思想。今天小編就來說說信號量以及信號量的完美替代品Bolts(Facebook出品的庫)。

先想想這樣一個場景:啟動app之后,需要先并發(fā)發(fā)送兩個數(shù)據(jù)請求requestA與requestB,同時這兩個數(shù)據(jù)請求還會做一些數(shù)據(jù)存儲方面的工作,然后當(dāng)requestA與requestB都完成之后,再做數(shù)據(jù)請求requestC。(記住一點:requestC一定要在requestA與requestB都完成之后才能執(zhí)行)。

以下是我找到的一個流程圖:

圖1:流程圖

我們應(yīng)該知道這絕對是一個很常見的需求,很多人在看到這個需求是很自然的想到使用NSOperation+NSNotificationCenter來實現(xiàn),但是這樣就費盡了。

在小編看來:常見的需求與場景蘋果(或者其余的公司,比如谷歌,F(xiàn)acebook,微軟等)絕對也會想到了,畢竟他們公司的編程能力遠勝于我們。既然他們想到了,那必然在SDK當(dāng)中必然是集成了。

放到iOS開發(fā)當(dāng)中,蘋果就提供了一個方案那就是GCD信號量。

GCD信號量的使用涉及到三個方法,分別是:

1.dispatch_semaphore_create(創(chuàng)建一個信號量)

2.dispatch_semaphore_signal(發(fā)送一個信號)

3.dispatch_semaphore_wait(等待)

以下便是信號量的簡單使用:

圖2:信號量的使用

執(zhí)行結(jié)果如下:

圖3:代碼執(zhí)行結(jié)果

由圖2可以看到線程3在線程1和線程2執(zhí)行完畢之后才執(zhí)行,這就是信號量的使用。此外,信號量還有很多功能,有時間的可以自行研究。

但是這樣寫的話我是看著不太習(xí)慣,而且這個也是需要寫邏輯的,很可能出現(xiàn)bug,比如少寫dispatch_semaphore_wait等。

信號量是給了這么一個解決問題的思路,很多第三方庫也是實現(xiàn)了此類的功能,其中Facebook出品的Bolts就是最好用的。

廢話不多說,直接上代碼:

圖4:數(shù)據(jù)請求1
圖5:數(shù)據(jù)請求2,同圖4
圖6:task1與task2并行執(zhí)行

使用Bolts實現(xiàn)多個數(shù)據(jù)請求并發(fā)就是這么簡單。

除此之外,Bolts還有更加廣泛的功能,比如:先執(zhí)行task1,task1成功之后再執(zhí)行task2。代碼如下:

圖7:task1與task2串行

github鏈接SemaphoreAndBolts,可以設(shè)置task1與task2中的isSuccess以及Bolts的官方文檔來綜合學(xué)習(xí)Bolts。

最后小編要說一句:Facebook出品,必屬精品

?著作權(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)容