Dispatch框架詳細解析(一) —— 基本概覽

版本記錄

版本號 時間
V1.0 2017.11.04

前言

在app中侠讯,在多線程等很多時候都會使用Dispatch倦始。下面我們就詳細解析一下這個框架的詳細情況驰坊。

Overview

首先看一下該框架的基本信息

下面看一下該框架的基本結構谊迄。


Dispatch

通過提交工作來調度由系統(tǒng)管理的隊列惩琉,在多核硬件上同時執(zhí)行代碼豆励。

Grand Central Dispatch(GCD)包含語言功能,運行時庫和系統(tǒng)增強功能瞒渠,可為macOS良蒸,iOS技扼,watchOS和tvOS上的多核硬件上的并發(fā)代碼執(zhí)行支持提供系統(tǒng),全面的改進嫩痰。

BSD子系統(tǒng)淮摔,Core FoundationCocoa API已經(jīng)全部擴展到使用這些增強功能來幫助系統(tǒng)和應用程序更快,更高效地運行并提高響應速度始赎。 考慮單個應用程序有效地使用多個內核是多么的困難,更不用說在具有不同數(shù)量的計算核心的不同計算機上或者在具有多個應用程序的環(huán)境中競爭這些內核仔燕。 在系統(tǒng)級運行的GCD可以更好地適應所有正在運行的應用程序的需求造垛,并以均衡的方式將它們與可用的系統(tǒng)資源進行匹配。


Dispatch 對象和ARC

當您使用Objective-C編譯器構建應用程序時晰搀,所有dispatch對象都是Objective-C對象五辽。 因此,啟用自動引用計數(shù)(ARC)時外恕,dispatch對象將被自動保留和釋放杆逗,就像任何其他Objective-C對象一樣。 當ARC未啟用時鳞疲,使用dispatch_retain
dispatch_release函數(shù)(或Objective-C語義)來保留并釋放您的調度對象罪郊。 您不能使用Core Foundation retain/release函數(shù)。

如果您需要在啟用了ARC的應用程序中使用retain/release語義尚洽,并使用更高的部署目標(以保持與現(xiàn)有代碼的兼容性)悔橄,則可以通過將-DOS_OBJECT_USE_OBJC = 0添加到編譯器標志來禁用基于Objective-C的dispatch對象。


Dispatch基本概覽

1. Managing Dispatch Queues

GCD提供并管理您的應用程序可以以塊對象的形式提交任務的FIFO隊列腺毫。 提交給dispatch隊列的工作在由系統(tǒng)完全管理的線程池上執(zhí)行癣疟。 不保證執(zhí)行任務的線程。

2. Managing Units of Work

調度Dispatch塊允許您直接配置隊列中各個工作單元的屬性兔毒。 他們還允許您為了等待完成漫贞,收到通知完成和/或取消它們的目的,處理個別工作單位育叁。

3. Prioritizing Work and Specifying Quality of Service

4. Using Dispatch Groups

分組塊允許聚合同步。 您的應用程序可以提交多個塊完丽,并在完成時跟蹤恋技,即使它們可能運行在不同的隊列中。 如果在完成所有指定任務之后才能進行此操作逻族,則此行為會很有幫助蜻底。

  • dispatch_group_t

    • 一組塊對象提交到隊列以進行異步調用。
  • dispatch_group_async

    • 將塊提交到調度隊列聘鳞,并將塊與指定的調度組相關聯(lián)薄辅。
  • dispatch_group_async_f

    • 將應用程序定義的函數(shù)提交給調度隊列,并將其與指定的調度組相關聯(lián)抠璃。
  • dispatch_group_notify_f

    • 當一組先前提交的塊對象完成時长搀,安排應用程序定義的函數(shù)提交給隊列。
  • dispatch_group_wait

    • 同步等待先前提交的塊對象完成; 如果在指定的超時期限過去之前塊沒有完成鸡典,則返回。

5. Using Dispatch Semaphores

調度信號量是傳統(tǒng)計數(shù)信號量的有效實現(xiàn)枪芒。 只有當調用線程需要被阻塞時彻况,調度信號才會調用內核。 如果調用信號量不需要阻塞舅踪,則不進行內核調用纽甘。

6. Using Dispatch Barriers

調度阻塞允許您在并發(fā)調度隊列中創(chuàng)建同步點抽碌。 當遇到障礙時悍赢,并發(fā)隊列會延遲屏障塊(或任何其他塊)的執(zhí)行,直到在屏障完成執(zhí)行之前提交的所有塊為止货徙。 在這一點上左权,障礙塊自行執(zhí)行。 完成后痴颊,隊列恢復正常的執(zhí)行行為赏迟。

7. Using Dispatch Data

8. Using Dispatch Time

9. Managing Dispatch Sources

10. Managing Dispatch I/O

調度I / O通道API允許您管理基于文件描述符的操作啸臀。 該API支持基于流的和隨機訪問語義來訪問文件描述符的內容届宠。

11. Working with Dispatch Objects

GCD提供了調度對象接口药薯,使您的應用程序能夠管理諸如內存管理,暫停和恢復執(zhí)行救斑,定義對象上下文以及記錄任務數(shù)據(jù)等方面的處理童本。 調度對象必須手動保留和釋放,而不是垃圾收集脸候。

12. Protocols

13. Reference

后記

未完,待續(xù)~~~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末凉馆,一起剝皮案震驚了整個濱河市薪寓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌澜共,老刑警劉巖向叉,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嗦董,居然都是意外死亡母谎,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門京革,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奇唤,“玉大人,你說我怎么就攤上這事匹摇∫龋” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵廊勃,是天一觀的道長懈贺。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么梭灿? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任画侣,我火速辦了婚禮,結果婚禮上堡妒,老公的妹妹穿的比我還像新娘配乱。我一直安慰自己,他們只是感情好宪卿,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布万栅。 她就那樣靜靜地躺著佑钾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪烦粒。 梳的紋絲不亂的頭發(fā)上休溶,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音扰她,去河邊找鬼兽掰。 笑死,一個胖子當著我的面吹牛徒役,可吹牛的內容都是我干的孽尽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼忧勿,長吁一口氣:“原來是場噩夢啊……” “哼杉女!你這毒婦竟也來了?” 一聲冷哼從身側響起鸳吸,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤熏挎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后晌砾,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坎拐,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年养匈,在試婚紗的時候發(fā)現(xiàn)自己被綠了哼勇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡呕乎,死狀恐怖猴蹂,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情楣嘁,我是刑警寧澤磅轻,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布珍逸,位于F島的核電站,受9級特大地震影響漱病,放射性物質發(fā)生泄漏杨帽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望叙赚。 院中可真熱鬧震叮,春花似錦、人聲如沸尉间。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽损话。三九已至丧枪,卻和暖如春拧烦,著一層夾襖步出監(jiān)牢的瞬間恋博,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工炼吴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留硅蹦,地道東北人童芹。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像皆愉,于是被迫代替她去往敵國和親幕庐。 傳聞我的和親對象是個殘疾皇子异剥,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內容

  • 一:base.h 二:block.h 1. dispatch_block_flags:DISPATCH_BLOCK...
    小暖風閱讀 2,411評論 0 0
  • 1.NSTimer不準時的原因:(1).RunLoop循環(huán)處理時間歹苦,每次循環(huán)是固定時間殴瘦,只有在這段時間才會去查看N...
    稻春閱讀 1,233評論 0 3
  • Execute code concurrently on multicore hardware by submit...
    ngugg閱讀 574評論 0 1
  • GCD筆記 總結一下多線程部分,最強大的無疑是GCD,那么先從這一塊部分講起. Dispatch Queue的種類...
    jins_1990閱讀 757評論 0 1
  • Dispatch Sources 現(xiàn)代系統(tǒng)通常提供異步接口姨蟋,允許應用向系統(tǒng)提交請求眼溶,然后在系統(tǒng)處理請求時應用可以繼...
    YangPu閱讀 303評論 0 0