亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

IOS多線程管理<1>關于多線程你必須知道的二三事

2019-11-14 18:25:14
字體:
來源:轉載
供稿:網友

 /*

   不是技術性的文章,只是記錄自己每天學習的方式

                                ----------------------------程序猿的征途是星辰的大海

*/


 

[1] 何為多線程? 

在多線程學習之前,很多人將進程,線程,異步,同步,串行,并發混為一談,概念混淆很嚴重,甚至在使用一些第三方類庫的時候,不知道它進行數據請求使用的是何種方式,是異步還是同步,多線程還是單線程。這里我總結了幾天來接觸的多線程方面的知識,把概念性的內容理清。

     進程:在IOS系統中,經常將一個應用等任務作為一個進程。

              1個進程要想執行任務,必須得有線程(每1個進程至少要有1條線程)

     線程進程的組成單位,是進程中一些多次重復使用的代碼塊

              線程是進程的基本執行單元,一個進程(程序)的所有任務都在線程中執行

              比如使用酷狗播放音樂、使用迅雷下載電影,都需要在線程中執行

              特點:一個線程同一時刻只能執行同一任務,如果多個任務交給同一任務來完成,

                      那么該線程就會執行完一個任務后再去執行下個任務,直到任務全部被完成。

 【多線程解釋】:

       基于進程與線程的特性,我們在一個進程中可以開辟多條線程,他們可以并行(也就是時間上同步)的執行不同的任務,好比進程為項目組,線程為項目組成員。多個線程可以同時執行不同的任務,就好比項目組成員可以同時有不同的分工,如美工和程序猿有不同的項目任務。

      我們需要注意的是:在單核的時代:CPU并不能同時執行多個線程!WTF!

      雖然聽起來不能接受,但確實是這樣的,CPU在同一時間只能執行一個線程,之所以看起來多個線程能同時進行工作,這是因為CPU在多個線程之間來回切換的原因,如果cpu來回切換的速度夠快,就造成了多線程并發執行的假象。

       多核心的時代里, 內核級結構使用搶占式的方式,將下一個線程安排在空閑的內核上,這里就不過多贅述,不論是單核還是多核心的方式,多線程都會提高對CPU工作的要求。

       也因為這樣的原因,線程過多的情況下,CPU資源就會被過多的占用,處理數據和資源的速度也會下降,所以要盡量控制一個進程中多線程的個數。(默認占用內存情況為主線程占用1M,子線程占用512KB)

     多線程的優點:能適當提高程序的執行效率,能適當提高資源的利用率

     多線程的缺點:線程的開始和退出都是需要內存空間來支持的,程序的復雜度也被增加,

                       不利于閱讀理解,線程越多的時候,整個進程對CPU的開銷越大。

                        使用多線程需要多關注這方面的內容,不能過于隨意的開啟新線程。

 


[2]主線程 和次線程 (工作線程)

    主線程:在每個進程中都存在一個主線程,所有的UI控件搭建和手勢拖拽以及視圖滾動等都是在主線程中實現的。

    我們常常需要進行一些耗時較長的工作,如數據請求,循環獲取數據或者處理內容,這些時候,主線程會被捆綁導致整個視圖屏幕無法被點擊,出現假死的情況,這對用戶體驗是致命的,我們為了避免出現這類的情況,往往采取開辟次線程的方法

   次線程:又稱為工作線程,主要作用就在于分擔主線程的任務,并可以防止屏幕假死事故。

   


 [3]串行和并行:

    串行:使用 一個線程處理多個任務時,必須按照順序一個個執行。

    并發:多個線程同步執行不同的任務。


[4]NSThread 簡單的開啟多線程

     對于NSThread來說,它是一種簡單的開啟多線程模式的方法。通過在主線程實例化它的對象,執行start方法(類方法初始化的NSThread對象自動執行),就可以簡單的實現一個次線程。

     <1>簡單實現多線程的例子

           

//在視圖中創建兩個按鈕-(void)creatUIButton{    NSArray * arr=@[@"線程1",@"線程2"];    for(int i=0;i<2;i++){    UIButton * btn=[UIButton buttonWithType:UIButtonTypeCustom];    btn.frame=CGRectMake(110, 100+100*i, 100, 30);    btn.tag=i+1;    btn.backgroundColor=[UIColor grayColor];    [btn setTitle:arr[i] forState:UIControlStateNormal];    [btn setTitleColor:[UIColor cyanColor ] forState:UIControlStateNormal];    [btn addTarget:self action:@selector(PRessBtn:) forControlEvents:UIControlEventTouchUpInside];    [self.view addSubview:btn];    }}//執行按鈕的點擊事件-(void)pressBtn:(id)sender{  //搭建子線程    UIButton * btn = (UIButton *)sender;   //多個線程并發工作 互不影響    if(btn.tag==1){        //1??類方法創建線程對象        /* 參數解釋:第一個參數為選擇器方法 第二個參數為方法響應者  第三個對象為傳遞的參數,為OC對象 */        NSNumber * num=@10;        [NSThread detachNewThreadSelector:@selector(threadMain1:) toTarget:self withObject:num];        //使用類方法創建線程對象,不需要手動開啟線程,只要線程被創建,就會自動調用線程方法。    }else{        NSNumber * num=@10;        //2??使用實例方法,創建線程對象,但必須手動開啟線程        NSThread * thread= [[NSThread alloc]initWithTarget:self selector:@selector(threadMain2:) object:num];        //手動開啟線程        [thread  start];                 }}//線程1執行代碼-(void)threadMain1:(NSNumber *)num{    NSLog(@"線程1 開始>>>>>>>>");    for (int i=0; i<[num intValue]; i++) {        NSLog(@"線程1  >>>>  i = %d",i);        [NSThread sleepForTimeInterval:0.1 ];        //線程沉睡0.5秒    }    NSLog(@"線程1 結束");//線程結束 就會立即退出  (消失)}//線程2執行代碼-(void)threadMain2:(NSNumber *)num{    NSLog(@"線程2 開始!-------------!");    for (int i=0; i<[num intValue]; i++) {        NSLog(@"線程2  i = %d",i*1000);        [NSThread sleepForTimeInterval:0.3];        //線程沉睡0.5秒    }    NSLog(@"線程2 結束");        }

-------在該實例中我們先點擊線程一按鈕,隨后立即點擊線程2按鈕

         如果是在主線程中執行的兩個點擊事件,它們會怎么執行了?

          這個想必很多人都清楚,在點擊第一個按鈕之后,隨后點擊第二個按鈕,他們的點擊事件是依次進行的。

          在按鈕1的點擊事件還沒有結束的時候,按鈕2的點擊事件不會響應。

         那么如果是在次線程中執行的兩個點擊事件,它們會怎么執行了?


  我們來看該實例的執行結果

可以看出在線程一的點擊事件還沒有結束的時候,點擊線程2按鈕,程序立刻開啟了線程2方法。因此,我們可以知道:

         多線程不會受彼此干擾,只要從主線程開辟一個次線程,它就能獨立的完成你安排的任務。我們也可以在主線程中打印一些標志性的內容,可以看出,主線程的任務不會因為次線程在進行而終止,它會繼續執行自己的代碼而不是等待次線程結束。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
伊人久久男人天堂| 国产精品99久久久久久久久久久久| 亚洲欧美国产精品专区久久| 国产亚洲综合久久| 亚洲自拍偷拍网址| 45www国产精品网站| 伊人久久精品视频| 青草青草久热精品视频在线网站| 亚洲精品久久久久国产| 中文字幕亚洲综合久久| 国产精品成人播放| 亚洲成人教育av| 亚洲成色777777在线观看影院| 北条麻妃一区二区三区中文字幕| 韩国v欧美v日本v亚洲| 成人中文字幕在线观看| 91精品久久久久久久久久| 91精品国产色综合| 亚洲欧美三级在线| 国产精品www| 成人激情在线播放| 91久久精品在线| 青青a在线精品免费观看| 国产精品揄拍一区二区| 18性欧美xxxⅹ性满足| 国产又爽又黄的激情精品视频| 欧美成人小视频| 欧美日韩免费在线观看| 久久五月天色综合| 97视频在线观看播放| 国产在线高清精品| 日本高清久久天堂| 国产亚洲精品日韩| 亚洲精品网址在线观看| 亚洲美女中文字幕| 国产精品视频男人的天堂| 国产精品视频导航| 日韩最新av在线| 精品丝袜一区二区三区| 欧美一区二三区| 久久久久久久网站| 久久久久久久久爱| 国产在线视频一区| 国内精品伊人久久| 日本三级韩国三级久久| 久久成人亚洲精品| 亚洲aaaaaa| 97久久精品国产| 青青草国产精品一区二区| 成人黄色中文字幕| 亚洲欧美中文日韩v在线观看| 一区二区三区日韩在线| 少妇高潮久久久久久潘金莲| 97香蕉超级碰碰久久免费的优势| 久久久久成人网| 欧美视频在线免费看| 欧美劲爆第一页| 97久久精品人人澡人人爽缅北| 一本一本久久a久久精品牛牛影视| 国产91精品视频在线观看| 美日韩精品免费视频| 国产成人免费91av在线| 最好看的2019的中文字幕视频| 久久九九免费视频| 国产精品视频yy9099| 国精产品一区一区三区有限在线| 另类专区欧美制服同性| 亚洲一区二区三区xxx视频| 亚洲综合自拍一区| 91欧美视频网站| 国产精品尤物福利片在线观看| 91午夜理伦私人影院| 国产亚洲人成a一在线v站| 欧美在线免费看| 国产午夜一区二区| 九色精品美女在线| 国产精品久久国产精品99gif| 国产精品嫩草影院一区二区| 欧美猛交ⅹxxx乱大交视频| 久久激情五月丁香伊人| 国产精品久久久久久久久久小说| 日韩精品在线免费播放| 欧美诱惑福利视频| 国产精品久久久久久久电影| 久久天堂av综合合色| 欧美巨猛xxxx猛交黑人97人| 久久九九热免费视频| 国产精品偷伦视频免费观看国产| 欧美激情国产高清| 亚洲区免费影片| 韩国精品美女www爽爽爽视频| 欧美xxxwww| 亚洲电影在线观看| 欧美情侣性视频| 亚洲男人天天操| 另类色图亚洲色图| 久久在线免费观看视频| 国产精品18久久久久久首页狼| 欧美最近摘花xxxx摘花| 亚洲精品福利免费在线观看| 久久成人18免费网站| 欧美另类极品videosbestfree| 亚洲va国产va天堂va久久| 92国产精品久久久久首页| 九九久久国产精品| 亚洲xxxxx电影| 欧美日韩激情网| 亚洲第一福利网站| 韩国三级电影久久久久久| 精品国产91久久久| 欧洲精品在线视频| 91av在线视频观看| 情事1991在线| 国产精品在线看| 久久欧美在线电影| 色偷偷91综合久久噜噜| 亚洲美女福利视频网站| 中文欧美日本在线资源| 91精品久久久久久久久久久久久| 91久久国产精品91久久性色| 久久成年人视频| 久久伊人免费视频| 这里只有精品在线播放| 国产精品高潮呻吟久久av黑人| 日韩电影大片中文字幕| 欧美极品xxxx| 欧美成人精品影院| 欧美成人免费播放| 欧美日韩精品中文字幕| 91欧美精品成人综合在线观看| 精品国内亚洲在观看18黄| 中文字幕免费精品一区高清| 亚洲欧美一区二区三区在线| 亚洲国产美女精品久久久久∴| 精品久久久久久电影| 久久影院在线观看| 国产日韩欧美视频| 538国产精品一区二区免费视频| 久久亚洲影音av资源网| 国模吧一区二区三区| 欧美日韩在线看| 欧美黄色成人网| 91a在线视频| 久久精品国产99国产精品澳门| 国产一区二区三区在线免费观看| 国产一区二区三区高清在线观看| 日韩男女性生活视频| 欧美理论电影在线观看| 国模精品视频一区二区三区| 欧美极品美女电影一区| 最近2019年好看中文字幕视频| 在线观看亚洲视频| 最近2019好看的中文字幕免费| 亚洲人成在线免费观看| 亚洲天堂av综合网| 国产91色在线| 啪一啪鲁一鲁2019在线视频| 精品视频—区二区三区免费| 欧美一级高清免费| 2024亚洲男人天堂| 在线播放国产精品| 国产精品美女主播在线观看纯欲| 日韩中文字幕精品视频| 午夜精品一区二区三区在线视|