iOS多線程之5.GCD的基本使用

來源:互聯網
上載者:User

標籤:理解   text   更新   fill   自己   alt   相等   函數   style   

  上一篇文章我對GCD的幾個基本概念做了介紹,但是大家看完了可能覺得對理解GCD並沒有什麼卵用。其實會用GCD其實很簡單,只要記住兩條就可以了。

1.  主隊列裡的任務必須在非同步函數中執行。

  主隊列裡的任務如果在同步函數中執行,就會造成死結。什麼是死結?容我舉例來說明。

 

  看到沒有,主隊列裡的任務沒有執行,程式也沒有往下執行,這就叫做死結。那又為什麼會發生死結。主隊列裡的任務預設都在主線程中執行,程式都把主隊列裡的任務放在主線程的最後面。當程式執行到2時,會把任務1放在主線程的後面,等主線程裡的任務都執行完了在執行。可是這是什麼函數啊?這是同步函數啊,它會堵塞當前的線程,後面的任務會等任務1執行完再執行。所以他們又開始互相等待,永遠不會往下執行了。

任務1對其他任務說:你們快執行啊?你們執行完我才能執行!

其他任務對任務1說:不行啊,你執行完我們才能執行。這是同步那個二貨規定的。

任務1和其他任務就開始了漫長的等待……

2.  全域並發隊列裡的任務在非同步函數中執行才能實現並發。   

   我們發現程式建立了三條線程,每條線程都執行下載圖片的任務,三張圖片幾乎是同時開始下載的。這就實現了並發,也沒有堵塞主線程。最重要的一點,下載完的圖片,一定要在主線程更新。

       如果有興趣可以試試把並發隊列裡的任務放在同步函數中執行,我們就會發現三張圖片的下載都是在主線程中進行的,圖片好長時間才下載完。因為圖片是一個一個下載的,而不像上面是同時開始下載。

       至於自訂隊列,我就不講了,因為和上面的原理差不多,而且用的地方也不多。並發隊列系統已經提供了,我們就不要自己建立了。至於串列隊列,我們運用多線程就是為了多任務同時進行,串列隊列裡的任務無論在同步函數還是非同步函數中,都不可能同時進行。

       關於GCD還有很多其他的用處,我會在下一篇文章中講。

            

iOS多線程之5.GCD的基本使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.