GCD基礎(chǔ)知識

最近看了一下日本人寫的Objective-C高級編程,將自己對GCD的理解梳理一下;

相關(guān)名詞理解

我最近一直在總結(jié)隊列與線程到底什么關(guān)系?

隊列就是一些任務聚合在一起,然后一個隊列可以用多個線程來執(zhí)行,當然一個隊列中的一個任務只能用一個線程來執(zhí)行。然后程序員將告訴系統(tǒng):隊列中的任務怎么添加,怎么執(zhí)行,系統(tǒng)的線程就會按照程序員的意思去執(zhí)行。


1串行隊列:簡單的理解就是串在一起的任務,加入到串行隊列中的任務會依次執(zhí)行;Serial Dispatch Queue。

2并行隊列:并行隊列相對于串行隊列,加入到并行隊列中的任務會同時執(zhí)行。Concurrent Dispatch Queue。

既然有了隊列的概念,就會想到,怎么將任務添加到隊列中?這里的任務,就是block;

1同步添加:將block同步添加到隊列中。同步添加完任務以后,會等待當前任務的執(zhí)行完畢,所以使用這個同步添加的時候要記得有個等待的過程。同步添加用的是dispatch_sync,對于等待的理解,這個函數(shù)就相當于Dispatch_group_wait(下面會對這個函數(shù)解釋);并且在判斷會不會導致死鎖時,就是根據(jù)自己不能等待自己來判斷會不會死鎖;dispatch_sync。

2異步添加:異步添加相對于同步添加就是不需要等待,添加到隊列中后,可以一邊執(zhí)行,一邊添加任務;dispatch_async。


主要API的用途及其解釋

1當需要在子線程進行一些操作,然后回到主線程操作時:

dipatch_async(queue,block);

前面的參數(shù)是隊列,后面是任務;


2需要等待某些任務執(zhí)行完后再執(zhí)行某些操作時:

dispatch_after(time,queue,block);

需要注意的是這里的的時間是在指定的時間內(nèi)添加到隊列中,而不是在指定時間后執(zhí)行,因為這些函數(shù)都是一些添加到隊列中的函數(shù)。還有就是可以指定過完多少時間和指定一個具體的時間。過完多少時間用dispacth_time_t,具體時間用dispatch_walltime(這個怎么用,還有點小復雜);


3在多個隊列執(zhí)行完畢后,再執(zhí)行某個隊列時:這種情況還是發(fā)生比較多,比如說,下載完三張圖片以后再執(zhí)行某些操作;

先要創(chuàng)建一個dispatch_group_t,然后用dispatch_group_async(group,queue,block);來將任務添加到隊列中,最后用dipatch_group_notify(group,queue,block)來添加執(zhí)行完前面的操作之后最后需要執(zhí)行的操作;

4保證多線程安全的只執(zhí)行一次的創(chuàng)建單例的函數(shù)

dispatch_once(dispatch_once_t *predicate,block);

次要API的用途及其解釋


1解決一邊讀文件,一邊寫文件的操作。就是當讀完一部分文件以后,需要等待讀取前面部分的完畢,再寫于一部分數(shù)據(jù)后再執(zhí)行讀取操作,就是一個并行讀完-串行寫入-并行繼續(xù)讀;

dispactch_barrier_async(queue,block);

這個函數(shù)會等待添加到同一個隊列中前面的任務執(zhí)行完以后,在執(zhí)行這個barrier中的任務,然后再執(zhí)行后面的任務。是一種隊列中,中間有個任務,必須等待前面的任務執(zhí)行完,再執(zhí)行完中間這個任務后,再執(zhí)行后面的任務;

2需要將制定的任務(block)添加到指定的隊列中執(zhí)行指定的次數(shù)

dispatch_apply(number,queue,^(size_t index){

}?);

注意:這里的block中帶有參數(shù),這是未了區(qū)分各個block而使用的。


3掛起當前的隊列,恢復當前的隊列

掛起用dispatch_suspend? 恢復用dispatch_resume;

還有一些api我暫時覺得還用不到,所以先沒有列出來

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容