iOS關於多線程的問題

來源:互聯網
上載者:User

標籤:c   管理   os   應用   不同的   問題   

這段時間在群裡看到很多人在問一些關於隊列,同步,非同步總是,現在抽空給總結一下

現在先說兩個基本的概念,啥是進程,啥是線程,啥又是多線程;先把這兩個總是給弄清再講下面的

進程:進行中的程式,我們就叫它進程.

線程:線程就是進程中的一個獨立的執行路徑.這句話怎麼理解呢! 一個程式它是按順序從上往下執行的, 這個執行順序我們可以把它看成是一條線,把這條線就叫做線程(個人理解,錯了勿噴);每一個程式中至少包含一條線程, 這條線程,我們叫它主線程.

多線程:多線程也就是說一個程式中有多條執行路徑.在iOS當中將一些比較耗時的操作放到另一條執行路徑裡.讓它與主線程同時運行.這樣不會造成主線程的堵塞.

扯完了這些那我們來看看什麼是任務,什麼是隊列!

任務分為同步任務與非同步任務,它們的區別是:
    同步任務優先順序高,線上程中有執行順序,不會開啟新的線程。
    非同步任務優先順序低,線上程中執行沒有順序,看cpu閑不閑。在主隊列中不會開啟新的線程,其他隊列會開啟新的線程。

隊列:隊列我們可以把它理解為是管理工作的,它裡面放著很多的任務,來管理這些任務什麼時候在哪些線程裡面執行.隊列是先進先出的

隊列分為串列隊列和並行隊列

串列隊列:隊列中的任務按順序執行(不會同時執行)
並行隊列:隊列中的任務會並發執行,可能會有一個疑問,隊列不是先進先出嗎,如果後面的任務執行完了,怎麼出去的了。這裡需要強調下,任務執行完畢了,不一定出隊列。只有前面的任務執行完了,才會出隊列。

 

串列隊列開啟非同步任務,是有順序的

並行隊列裡開啟同步任務是有執行順序的,只有非同步才沒有順序

 

來侃侃在主隊列中開啟同步任務為什麼會阻塞線程?

在主隊列開啟同步任務,因為主隊列是串列隊列,裡面的線程是有順序的,先執行完一個線程才執行下一個線程,而主隊列始終就只有一個主線程,主線程是不會執行完畢的,因為他是無限迴圈的,除非關閉應用程式。因此在主線程開啟一個同步任務,同步任務會想搶佔執行的資源,而主線程任務一直在執行某些操作,不肯放手。兩個的優先順序都很高,最終導致死結,阻塞線程了

 

 

為啥串列隊列開啟非同步任務後嵌套同步任務造成死結?(不作死就不會死)

因為串列隊列中線程是有執行順序的,需要等上面開啟的非同步任務執行完畢,才會執行下面開啟的同步任務。而上面的非同步任務還沒執行完,要到下面的大括弧才算執行完畢,而下面的同步任務已經在搶佔資源了,就會發生死結。


串列隊列中開啟同步任務後嵌套同步任務造成死結(再套幾下,就不知道怎麼死的了)?

因為串列隊列中線程是有執行順序的,需要等上面開啟的同步任務執行完畢,才會執行下面開啟的同步任務。而上面的同步任務還沒執行完,要到下面的大括弧才算執行完畢,而下面的同步任務已經在搶佔資源了,就會發生死結

 

串列隊列開啟同步任務後嵌套非同步任務就不會造成死結,開啟非同步,就會開啟一個新的線程,不會阻塞線程

 

主線程隊列和GCD建立的隊列也是有區別?

主線程隊列和GCD建立的隊列是不同的。在GCD中建立的隊列優先順序沒有主隊列高,所以在GCD中的串列隊列開啟同步任務裡面沒有嵌套任務是不會阻塞主線程,只有一種可能導致死結,就是串列隊列裡,嵌套開啟任務,有可能會導致死結。

 

主線程隊列中不能開啟同步,會阻塞主線程。只能開啟非同步任務,開啟非同步任務也不會開啟新的線程,只是降低非同步任務的優先順序,讓cpu閒置時候才去調用。而同步任務,會搶佔主線程的資源,會造成死結。

 

 

 

相關文章

聯繫我們

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