iOS - 同步異步瞬沦、串行并行

同步、異步:表示開辟新線程的能力雇锡。
串行逛钻、并行:表示隊(duì)列的調(diào)度任務(wù)的能力。

任務(wù):就是執(zhí)行操作的意思锰提,換句話說就是你在線程中執(zhí)行的那段代碼曙痘。在 GCD 中是放在 block 中的。執(zhí)行任務(wù)有兩種方式:『同步執(zhí)行』 和 『異步執(zhí)行』立肘。兩者的主要區(qū)別是:是否等待隊(duì)列的任務(wù)執(zhí)行結(jié)束边坤,以及是否具備開啟新線程的能力。

同步執(zhí)行(sync):
–同步添加任務(wù)到指定的隊(duì)列中谅年,在添加的任務(wù)執(zhí)行結(jié)束之前茧痒,會一直等待,直到隊(duì)列里面的任務(wù)完成之后再繼續(xù)執(zhí)行融蹂。
–只能在當(dāng)前線程中執(zhí)行任務(wù)文黎,不具備開啟新線程的能力。
異步執(zhí)行(async)
–異步添加任務(wù)到指定的隊(duì)列中殿较,它不會做任何等待耸峭,可以繼續(xù)執(zhí)行任務(wù)。
–可以在新的線程中執(zhí)行任務(wù)淋纲,具備開啟新線程的能力劳闹。

注意:異步執(zhí)行雖然具有開啟新線程的能力,但是并不一定開啟新線程洽瞬。這跟任務(wù)所指定的隊(duì)列類型有關(guān)本涕。

隊(duì)列(Dispatch Queue):這里的隊(duì)列指執(zhí)行任務(wù)的等待隊(duì)列,即用來存放任務(wù)的隊(duì)列伙窃。隊(duì)列是一種特殊的線性表菩颖,采用 FIFO(先進(jìn)先出)的原則,即新任務(wù)總是被插入到隊(duì)列的末尾为障,而讀取任務(wù)的時(shí)候總是從隊(duì)列的頭部開始讀取晦闰。

串行隊(duì)列(Serial Dispatch Queue):
– 每次只有一個(gè)任務(wù)被執(zhí)行放祟。讓任務(wù)一個(gè)接著一個(gè)地執(zhí)行。(只開啟一個(gè)線程呻右,一個(gè)任務(wù)執(zhí)行完畢后跪妥,再執(zhí)行下一個(gè)任務(wù))
并發(fā)隊(duì)列(Concurrent Dispatch Queue):
-可以讓多個(gè)任務(wù)并發(fā)(同時(shí))執(zhí)行。(可以開啟多個(gè)線程声滥,并且同時(shí)執(zhí)行任務(wù))
注意:并發(fā)隊(duì)列 的并發(fā)功能只有在異步(dispatch_async)方法下才有效眉撵。

『主線程』中,『不同隊(duì)列』+『不同任務(wù)』簡單組合的區(qū)別:

622de264d90340e3bc62c70251093c53.png
  • 注意:從上邊可看出: 『主線程』 中調(diào)用 『主隊(duì)列』+『同步執(zhí)行』 會導(dǎo)致死鎖問題落塑。這是因?yàn)?主隊(duì)列中追加的同步任務(wù) 和 主線程本身的任務(wù) 兩者之間相互等待纽疟,阻塞了 『主隊(duì)列』,最終造成了主隊(duì)列所在的線程(主線程)死鎖問題憾赁。
    而如果我們在 『其他線程』 調(diào)用 『主隊(duì)列』+『同步執(zhí)行』污朽,則不會阻塞 『主隊(duì)列』,自然也不會造成死鎖問題缠沈。最終的結(jié)果是:不會開啟新線程膘壶,串行執(zhí)行任務(wù)。

除了上邊提到的『主線程』中調(diào)用『主隊(duì)列』+『同步執(zhí)行』會導(dǎo)致死鎖問題洲愤。實(shí)際在使用『串行隊(duì)列』的時(shí)候颓芭,也可能出現(xiàn)阻塞『串行隊(duì)列』所在線程的情況發(fā)生,從而造成死鎖問題柬赐。這種情況多見于同一個(gè)串行隊(duì)列的嵌套使用亡问。

比如下面代碼這樣:在『異步執(zhí)行』+『串行隊(duì)列』的任務(wù)中,又嵌套了『當(dāng)前的串行隊(duì)列』肛宋,然后進(jìn)行『同步執(zhí)行』州藕。

dispatch_queue_t queue = dispatch_queue_create("test.queue", DISPATCH_QUEUE_SERIAL);
dispatch_async(queue, ^{ // 異步執(zhí)行 + 串行隊(duì)列
dispatch_sync(queue, ^{ // 同步執(zhí)行 + 當(dāng)前串行隊(duì)列
// 追加任務(wù) 1
[NSThread sleepForTimeInterval:2]; // 模擬耗時(shí)操作
NSLog(@"1---%@",[NSThread currentThread]); // 打印當(dāng)前線程
});
});

執(zhí)行上面的代碼會導(dǎo)致 串行隊(duì)列中追加的任務(wù) 和 串行隊(duì)列中原有的任務(wù) 兩者之間相互等待,阻塞了『串行隊(duì)列』酝陈,最終造成了串行隊(duì)列所在的線程(子線程)死鎖問題床玻。
主隊(duì)列造成死鎖也是基于這個(gè)原因,所以沉帮,這也進(jìn)一步說明了主隊(duì)列其實(shí)并不特殊锈死。

關(guān)于 『隊(duì)列中嵌套隊(duì)列』這種復(fù)雜情況,這里也簡單做一個(gè)總結(jié)穆壕。不過這里只考慮同一個(gè)隊(duì)列的嵌套情況

『不同隊(duì)列』+『不同任務(wù)』 組合待牵,以及 『隊(duì)列中嵌套隊(duì)列』 使用的區(qū)別:


433687e6c1c142bc9a1b852b4a2ad925.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市喇勋,隨后出現(xiàn)的幾起案子缨该,更是在濱河造成了極大的恐慌,老刑警劉巖川背,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贰拿,死亡現(xiàn)場離奇詭異蛤袒,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)壮不,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門汗盘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來皱碘,“玉大人询一,你說我怎么就攤上這事“┐唬” “怎么了健蕊?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長踢俄。 經(jīng)常有香客問我缩功,道長,這世上最難降的妖魔是什么都办? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任嫡锌,我火速辦了婚禮,結(jié)果婚禮上琳钉,老公的妹妹穿的比我還像新娘势木。我一直安慰自己,他們只是感情好歌懒,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布啦桌。 她就那樣靜靜地躺著,像睡著了一般及皂。 火紅的嫁衣襯著肌膚如雪甫男。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天验烧,我揣著相機(jī)與錄音板驳,去河邊找鬼。 笑死碍拆,一個(gè)胖子當(dāng)著我的面吹牛若治,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播倔监,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼直砂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了浩习?” 一聲冷哼從身側(cè)響起静暂,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谱秽,沒想到半個(gè)月后洽蛀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摹迷,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年郊供,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了峡碉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡驮审,死狀恐怖鲫寄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情疯淫,我是刑警寧澤地来,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站熙掺,受9級特大地震影響未斑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜币绩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一蜡秽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧缆镣,春花似錦芽突、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至力细,卻和暖如春睬澡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背眠蚂。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工煞聪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逝慧。 一個(gè)月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓昔脯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親笛臣。 傳聞我的和親對象是個(gè)殘疾皇子云稚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評論 2 348

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