淺談多線程,多線程

來源:互聯網
上載者:User

淺談多線程,多線程

寫這篇部落格的目的是為了跟大家分享本人對多線程的一些淺顯的理解,順道梳理一遍自己掌握的知識,如有不妥之處,歡迎各位大牛指正.

 

首先要理解兩個概念:

進程(Process):程式的一次運行,擁有獨立的記憶體位址空間(一個iOS應用只有一個進程).

線程(Thread):

1.線程是進程的基本執行單元,是作業系統可以調度的最小單元,一個進程中可以有多個線程,也至少有一個線程.

2.多個線程共用進程的地址空間,每個線程都有自己的棧空間,共用堆空間.

3.多個線程可以同步執行,目的在於提高CPU資源使用率.

 

多線程優缺點:

優點:可以提高CPU利用率,防止阻塞主線程,避免使UI出現假死(卡頓)現象,這裡提醒大家,程式展現給使用者看的,有關UI介面的更新儘可能的在主線程中處理,主線程也儘可能的只處理UI的更新和展示,其他的比如資料的處理之類的操作都放到子線程中,這樣就避免了使用者與應用介面的互動出現卡頓延遲現象.

缺點:每個線程都有自己的線程棧,需要佔據一定的空間;線程調度需要消耗CPU時間;程式設計更加複雜,需要考慮線程間通訊、資料共用和資料安全等問題。

 

iOS多線程的方法:

1.C語言介面:pthread.

2.NSThread

3.NSOperation

4.GCD

這裡暫時只介紹GCD.

GCD(Grand Central Dispatch)是一種非同步執行任務的技術。封裝了多線程開發中的痛點“線程管理”,開發人員只需要定義任務,並提交到分發隊列(Dispatch Queue),由GCD自動管理和調度。

GCD使用block定義任務,可以同步或者非同步提交任務。

//同步提交任務,queue為任務隊列dispatch_sync(queue,^{/*任務*/};//非同步提交任務dispatch_async(queue,^{/*任務*/};

 

dispath_sync方法會等待任務執行完成才返回,等待意味著執行dispatch_sync的線程“暫停”,且不能提交任務到當前線程(提交任務的線程,易死結)。

dispath_async方法不會等待任務執行完成就會返回。

 

隊列的類型:

GCD有兩種隊列類型:

串列隊列:等待前一個任務執行完成。串列隊列中的任務按先進先出(FIFO)的規則執行,並且前一個任務執行完,才能處理後一個任務,且只使用一個線程處理隊列。

並行隊列:不等待前面的任務執行完成。並行隊列使用多個線程同時處理隊列,同時執行的任務數與線程的數目有關,線程的數目與CPU核心數目、CPU負載等相關,打個比方,並行隊列下有一個任務:從1數到100

        for (int i = 0; i < 100; i++) {            /**<此方法是擷取系統全域隊列,全域隊列是一個並行隊列。*/            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{                    NSLog(@"i = %d",i);            });        }

 

能發現進程ID始終是59249,而線程ID卻有多個,列印的數字也不是按照規範的順序,這是因為線程非同步處理的原因,每個線程都在“爭搶”執行任務,而CPU會根據目前的狀態安排一定數目的線程執行任務,每一個線程執行完任務後繼續執行下一個任務。PS:隊列安排線程去完成任務,線程是幫我們處理任務的,主隊列主線程只有一個,讓系統主線程少幹我們安排的任務,以便保證UI的流暢性,再次強調更新UI一定要放在主線程上。

--------分割線,有空再接著寫-------

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.