iOS多線程總結(jié)

1、多線程原理?

多線程其實(shí)是個(gè)假象组力,因?yàn)镃PU同一時(shí)間只能處理一條線程县貌,多線程并發(fā)執(zhí)行,其實(shí)是CPU快速在多條
線程之間調(diào)度痪寻,如果CPU調(diào)度線程的時(shí)間足夠快螺句,就造成了多線程并發(fā)的假象。

2橡类、線程不建議開太多蛇尚,5條以內(nèi),因?yàn)殚_啟線程是要占內(nèi)存的顾画,單個(gè)線程隨線程增多效率降低取劫。主線程默認(rèn)1MB,
3亲雪、在iOS中線程有4種創(chuàng)建方式

1勇凭、pthread,通用API,跨平臺(tái)义辕,使用難度大虾标,是C語言寫的,需要程序員管理生命周期,幾乎不用璧函,使用價(jià)值不大
2傀蚌、NSThread 使用更加面向?qū)ο螅?jiǎn)單蘸吓,oc語言善炫,需要程序員管理生命周期,偶爾使用库继,一般是為了拿當(dāng)前線程[NSThread currentThread]和主線程[NSThread mainThread]
3箩艺、GCD 旨在替代NSThread等線程技術(shù),充分利用設(shè)備內(nèi)核宪萄,c語言  生命周期自動(dòng)管理艺谆,經(jīng)常使用
4、NSOperation  基于GCD  比GCD多了一些簡(jiǎn)單的功能拜英,使用更加面向?qū)ο?静汤,oc語言,生命周期自動(dòng)管理居凶,經(jīng)常使用

什么是串行隊(duì)列虫给、并發(fā)隊(duì)列?
這里有必要引入線程池的概念侠碧,通俗點(diǎn)講抹估,線程池就是一個(gè)裝線程的容器,用來管理線程的
串行隊(duì)列:串行隊(duì)列底層的線程池只要一個(gè)線程舆床,因此只提供一個(gè)線程用來執(zhí)行任務(wù)棋蚌,所以后一個(gè)任務(wù)必須等到前一個(gè)任務(wù)執(zhí)行結(jié)束才能開始執(zhí)行,我們可以理解為任務(wù)執(zhí)行方式是有序的
并發(fā)隊(duì)列:線程池提供多個(gè)線程來執(zhí)行任務(wù)挨队,按照FIFO的順序并發(fā)啟動(dòng)谷暮、執(zhí)行任務(wù)多個(gè)并發(fā)任務(wù)。

隊(duì)列的創(chuàng)建方式

//1盛垦、獲取主隊(duì)列
dispatch_queue_t queue = dispatch_get_main_queue()
//2湿弦、并發(fā)隊(duì)列
dispatch_queue_t queue =  dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//3、并發(fā)隊(duì)列
dispatch_queue_t queue = dispatch_queue_create("a", DISPATCH_QUEUE_CONCURRENT);
//4腾夯、串行隊(duì)列
dispatch_queue_t queue = dispatch_queue_create("a", DISPATCH_QUEUE_SERIAL);

4颊埃、同步和異步
同步不會(huì)開辟新的線程,異步開辟新的線程

下面用GCD就講一講這4種隊(duì)列的區(qū)別
1蝶俱、同步串行隊(duì)列:順序執(zhí)行班利,不可以同時(shí)執(zhí)行, 不新開線程,主線程的同步會(huì)死鎖榨呆。
2罗标、異步串行隊(duì)列:順序執(zhí)行,不可以同時(shí)執(zhí)行,新開線程
3闯割、同步并發(fā)隊(duì)列:順序執(zhí)行彻消,不可以同時(shí)執(zhí)行,不新開線程宙拉,
4宾尚、異步并發(fā)隊(duì)列:可以同時(shí)并發(fā)執(zhí)行,新開線程

dispatch_sync(dispatch_get_main_queue(), ^{

     NSLog(@"P怀骸;吞!锥忿!%@",[NSThread currentThread]);
});
NSLog(@"%@",[NSThread currentThread]);

在主線程中執(zhí)行崔步,都不會(huì)打印,主線程的同步隊(duì)列會(huì)死鎖,因?yàn)橥讲?會(huì)開辟新的線程缎谷,而串行隊(duì)列遵循FIFO的原則,主線程會(huì)一直執(zhí)行灶似,
新添加的同步主隊(duì)列要等原來的主隊(duì)列執(zhí)行完畢才能執(zhí)行列林,所以就會(huì)造
成死鎖的現(xiàn)象

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_sync(queue, ^{
        NSLog(@"%@",[NSThread currentThread]);//任務(wù)一
});
NSLog(@"!@也选O3铡!%@",[NSThread currentThread]);//任務(wù)二
先打印任務(wù)一春感,再打印任務(wù)二

這里有一篇文章詳細(xì)介紹了關(guān)于線程死鎖的問題
http://ios.jobbole.com/82622/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末砌创,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鲫懒,更是在濱河造成了極大的恐慌嫩实,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窥岩,死亡現(xiàn)場(chǎng)離奇詭異甲献,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)颂翼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門晃洒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人朦乏,你說我怎么就攤上這事球及。” “怎么了呻疹?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵吃引,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng)际歼,這世上最難降的妖魔是什么惶翻? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮鹅心,結(jié)果婚禮上吕粗,老公的妹妹穿的比我還像新娘。我一直安慰自己旭愧,他們只是感情好颅筋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著输枯,像睡著了一般议泵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上桃熄,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天先口,我揣著相機(jī)與錄音,去河邊找鬼瞳收。 笑死碉京,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的螟深。 我是一名探鬼主播谐宙,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼界弧!你這毒婦竟也來了凡蜻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤垢箕,失蹤者是張志新(化名)和其女友劉穎划栓,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體条获,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茅姜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了月匣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钻洒。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖锄开,靈堂內(nèi)的尸體忽然破棺而出素标,到底是詐尸還是另有隱情,我是刑警寧澤萍悴,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布头遭,位于F島的核電站寓免,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏计维。R本人自食惡果不足惜袜香,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鲫惶。 院中可真熱鬧蜈首,春花似錦、人聲如沸欠母。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赏淌。三九已至踩寇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間六水,已是汗流浹背俺孙。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掷贾,地道東北人鼠冕。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像胯盯,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子计露,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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

  • 目錄 簡(jiǎn)述 NSThread GCD操作與隊(duì)列異步操作并行隊(duì)列同步操作并行隊(duì)列同步操作串行隊(duì)列異步操作串行隊(duì)列隊(duì)列...
    魚王00閱讀 501評(píng)論 0 2
  • 從哪說起呢博脑? 單純講多線程編程真的不知道從哪下嘴。票罐。 不如我直接引用一個(gè)最簡(jiǎn)單的問題叉趣,以這個(gè)作為切入點(diǎn)好了 在ma...
    Mr_Baymax閱讀 2,757評(píng)論 1 17
  • 進(jìn)程 什么是進(jìn)程 進(jìn)程是指在系統(tǒng)中正在運(yùn)行的一個(gè)應(yīng)用程序 每個(gè)進(jìn)程之間是獨(dú)立的,每個(gè)進(jìn)程均運(yùn)行在其專用且受保護(hù)的內(nèi)...
    45b645c5912e閱讀 470評(píng)論 0 5
  • 原文:http://www.cocoachina.com/ios/20170707/19769.html 本文主要...
    冬的天閱讀 2,271評(píng)論 0 12
  • 我有2把剪紙刀,淺粉蝴蝶剪刀是剪直線的囤躁,另一把黃剪刀是剪出花紋的冀痕。拿一張正方形剪紙沿虛線折疊成一個(gè)長(zhǎng)方形荔睹,...
    rx任曦閱讀 172評(píng)論 0 0