iOS開發進階--1.多線程簡介

相關文章鏈接:
1.多線程簡介(本文)
2.實現多線程的3種方法
......待續

學習是由已知的知識模型推理未知的知識模型的的過程。

本文適合學習完objective-c基礎,想進一步提高做iOS開發的同學閱讀。

在說線程的時候,我們先看看進程。

1.進程

每一個運行在系統中的應用程序,都有一個進程。進程是獨立的,有着自己專屬運行空間。進程的出現是爲了解決多任務處理系統的問題。
首先看看單任務處理系統的示意圖:


單任務處理系統.png

CPU按順序執行任務1,任務2,任務3.... 前面的任務沒有執行完,後面的任務是沒法執行的。任務4哪怕再緊急,用的時間再短,也要等前面費時的任務3執行完才能輪到它。想象一下,你在聽音樂的時候,想看視頻,那就先把音樂聽完才能去看,如果這樣我估計你會瘋掉吧。不過計算機剛剛出現的時候,系統就是單任務的。

任務1,任務2.....這裏所說的任務 也就是運行在iOS系統中的app

幸好,多任務處理系統來了。

多任務調度系統.png

時間片(每個進程被分配一時間段,稱爲時間片,即進程允許執行的時間)。
注意:因爲時間片的時間很短,CPU執行的速度非常快,每個任務幾乎都能得到響應並執行。造成這些任務同時運行的假象。實際上在單個時間片內,只有一個任務在執行。

這裏我們可以看出,進程是伴隨多任務處理系統出現的一個產物。滿足了我們閱讀的同時,又想聽音樂的願望。

2.線程

每個app對應一個進程,系統協調進程之間的關係。但是在app內部,也有很多的不同的操作,有些操作是緊急的,有些操作是耗時的。
那麼如何合理的安排這些操作呢?線程應運而生。原理與以上進程的協調是相似的。
所以有時候稱線程爲輕量級進程。

  • 線程是進程中一個獨立的執行路徑(控制單元)
  • 一個進程中至少包含一條線程,即主線程
  • 我們可以把耗時的操作放在別的線程中執行
  • UI相關的操作都在主線程中,所以要在主線程中更新UI

以淘寶爲例,頁面上有很多的圖片,如果在主線程中下載圖片,那麼頁面就會非常的卡。所以會把下載圖片和耗時的操作放在別的線程。

淘寶頁面加載圖片.png
耗時的操作放在別的線程中.png

3.使用多線程的優缺點

優點:

  • 充分發揮多核處理器優勢,將不同線程任務分配給不同的處理器,真正進入“並行運算”狀態
  • 將耗時的任務分配到其他線程執行,由主線程負責統一更新界面會使應用程序更加流暢,用戶體驗更好
  • 當硬件處理器的數量增加,程序會運行更快,而程序無需做任何調整

缺點:

  • 新建線程會佔用更多的內存和cpu,線程太多會降低系統的總體性能

誤區:

  • 多線程技術只是併發的執行任務,讓優先級更多,更緊急的操作得到響應,並不會提高單個算法的執行效率。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章