iOS - 串行隊(duì)列

背景:開發(fā)人員在需要開啟線程處理任務(wù)時弃酌,大多都采用了全局隊(duì)列默認(rèn)優(yōu)先級來處理,所以項(xiàng)目中積累了大量的全局隊(duì)列默認(rèn)優(yōu)先級锦积,導(dǎo)致了一人干活,全家圍觀瓶殃。

  1. 項(xiàng)目中通常采取的都是異步主隊(duì)列操作或者異步全局隊(duì)列操作充包,卻并未涉及到創(chuàng)建同步隊(duì)列;查閱Apple文檔后發(fā)現(xiàn)dispatch_queue_attr_t屬性遥椿,可以用來創(chuàng)建同步隊(duì)列,然后再去異步或者同步執(zhí)行線程淆储;

  2. 異步主隊(duì)列操作:
    dispatch_async(dispatch_get_main_queue(), ^{});

  3. 異步全局隊(duì)列操作:
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{});

  4. 異步同步隊(duì)列:
    dispatch_queue_attr_t attr = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_USER_INTERACTIVE, -1);
    dispatch_queue_t queue = dispatch_queue_create("com.lotus.LCQueueForUserInteractive", attr);
    dispatch_async(attr, ^{});

  5. 為解決背景問題冠场,我們設(shè)定不同的優(yōu)先級,創(chuàng)建與CPU核數(shù)相等的串行隊(duì)列本砰,通過優(yōu)先級的合理使用和串行隊(duì)列的調(diào)度碴裙,充分利用時間片和多核的效率,同時不出現(xiàn)相關(guān)副作用的情況下實(shí)現(xiàn)多線程操作点额。

   QOS_CLASS_USER_INTERACTIVE 0x21,              用戶交互(希望盡快完成舔株,用戶對結(jié)果很期望,不要放太耗時操作)
   QOS_CLASS_USER_INITIATED 0x19,                用戶期望(不要放太耗時操作)
   QOS_CLASS_DEFAULT 0x15,                       默認(rèn)(不是給程序員使用的还棱,用來重置對列使用的)
   QOS_CLASS_UTILITY 0x11,                       實(shí)用工具(耗時操作载慈,可以使用這個選項(xiàng))
   QOS_CLASS_BACKGROUND 0x09,                    后臺
   QOS_CLASS_UNSPECIFIED 0x00,                   未指定
*/

/// 與用戶交互的任務(wù),這些任務(wù)通常跟UI級別的刷新相關(guān)珍手,比如動畫办铡,cell高度辞做,frame等UI的計(jì)算
UIKIT_STATIC_INLINE dispatch_queue_t LCQueueForUserInteractive(void){
    // 自定義隊(duì)列的優(yōu)先級 <創(chuàng)建串行隊(duì)列,通過優(yōu)先級的合理使用和串行隊(duì)列的調(diào)度,充分利用時間片和多核的效率>
    dispatch_queue_attr_t attr = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_USER_INTERACTIVE, -1);
    return dispatch_queue_create("com.lotus.LCQueueForUserInteractive", attr);;
}

/// 由用戶發(fā)起的并且需要立即得到結(jié)果的任務(wù)寡具,比如讀取數(shù)據(jù)(配置秤茅,用戶信息等)來加載UI,會在幾秒或者更短的時間內(nèi)完成
UIKIT_STATIC_INLINE dispatch_queue_t LCQueueForUserInitiated(void){
    dispatch_queue_attr_t attr = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_USER_INITIATED, -1);
    return dispatch_queue_create("com.lotus.LCQueueForUserInitiated", attr);;
}

/// 一些耗時的任務(wù)童叠,比如復(fù)雜的組合的網(wǎng)絡(luò)請求框喳,圖片下載,上傳
UIKIT_STATIC_INLINE dispatch_queue_t LCQueueForUtility(void){
    dispatch_queue_attr_t attr = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_UTILITY, -1);
    return dispatch_queue_create("com.lotus.LCQueueForUtility", attr);;
}

/// 對用戶不可見厦坛,可以長時間在后臺運(yùn)行帖努,比如,拉取配置粪般,地理位置上報拼余,日志上報等
UIKIT_STATIC_INLINE dispatch_queue_t LCQueueForBackground(void){
    dispatch_queue_attr_t attr = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_BACKGROUND, -1);
    return dispatch_queue_create("com.lotus.LCQueueForBackground", attr);;
}

/// 默認(rèn),不推薦作為首選使用
UIKIT_STATIC_INLINE dispatch_queue_t LCQueueForDefault(void){
    return dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末亩歹,一起剝皮案震驚了整個濱河市匙监,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌小作,老刑警劉巖亭姥,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異顾稀,居然都是意外死亡达罗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門静秆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粮揉,“玉大人,你說我怎么就攤上這事抚笔》鋈希” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵殊橙,是天一觀的道長辐宾。 經(jīng)常有香客問我,道長膨蛮,這世上最難降的妖魔是什么叠纹? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮敞葛,結(jié)果婚禮上誉察,老公的妹妹穿的比我還像新娘。我一直安慰自己制肮,他們只是感情好冒窍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布递沪。 她就那樣靜靜地躺著,像睡著了一般综液。 火紅的嫁衣襯著肌膚如雪款慨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天谬莹,我揣著相機(jī)與錄音檩奠,去河邊找鬼。 笑死附帽,一個胖子當(dāng)著我的面吹牛埠戳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蕉扮,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼整胃,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了喳钟?” 一聲冷哼從身側(cè)響起屁使,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎奔则,沒想到半個月后蛮寂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡易茬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年酬蹋,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抽莱。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡范抓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出岸蜗,到底是詐尸還是另有隱情尉咕,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布璃岳,位于F島的核電站,受9級特大地震影響悔捶,放射性物質(zhì)發(fā)生泄漏铃慷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一蜕该、第九天 我趴在偏房一處隱蔽的房頂上張望犁柜。 院中可真熱鬧,春花似錦堂淡、人聲如沸馋缅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萤悴。三九已至瘾腰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間覆履,已是汗流浹背蹋盆。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留硝全,地道東北人栖雾。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像伟众,于是被迫代替她去往敵國和親析藕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容