iOS 為什麼app都是非同步程式設計

林堯彬發表於2020-04-04

iOS 為什麼app都是非同步程式設計


對本文題目首先需要了解一下什麼是非同步程式設計,非同步程式設計即多執行緒程式設計.

多執行緒是一個比較輕量級的方法來實現單個應用程式內多個程式碼執行路徑。

在具體理解多執行緒之前先看一個都理解的例子:
在系統級別內,程式並排執行,程式分配到每個程式的執行時間是基於該程式的所需時間和其他程式的所需時間來決定的。
例子中的程式我們就可以理解為執行緒,系統則可以理解為程式,在每個程式內部,存在一個或者多個執行執行緒,它同時或在一個幾乎同時發生的方式裡執行不同的任務,多個執行緒同時執行也即是我們所謂的多執行緒.
有些程式是一條直線,起點到終點——如簡單的hello world,執行列印完,它的生命週期便結束了,像是曇花一現。有些程式是一個圓,不斷迴圈直到將它切斷——如作業系統,一直執行直到你關機。通常那個"圓"是app中的主執行緒."直線"是我們為了一些操作而新建的執行緒,這些操作通常是一些耗時的操作,例如下載圖片.下載圖片的速度是和網速有關係的,當網速慢的時候,如果我們將下載與現實操作都放在"圓"內,會導致"圓"的迴圈在某一個點上停止,從而造成卡頓現象.而"直線"確恰恰相,"直線"與"圓"的執行是非同步的,因此不會造成圓的卡頓.

那麼下面詳細理解一下"圓".
Mac和iOS中的程式啟動,建立好一個程式的同時,一個執行緒便開始運作,這個執行緒叫做主執行緒。主線成在程式中的位置和其他執行緒不同,它是其他執行緒最終的父執行緒,且所有的介面的顯示操作即AppKit或UIKit的操作必須在主執行緒進行。

說了這麼多,在下面就說一下使用多執行緒應該注意什麼.
正如系統中每一個程式都有自己獨立的虛擬記憶體空間,同一個程式中的多個執行緒則公用程式的記憶體空間。
每建立一個新的進成,都需要一些記憶體(如每個執行緒有自己的stack空間)和消耗一定的CPU時間。
當多個進成對同一個資源出現爭奪的時候需要注意執行緒安全問題建立執行緒
iPhone中的執行緒應用並不是無節制的,官方給出的資料顯示,iPhone OS下的主執行緒的堆疊大小是1M,第二個執行緒開始就是512KB,並且該值不能通過編譯器開關或執行緒API函式來更改,只有主執行緒有直接修改UI的能力.因此我們實際程式設計的時候應該適當控制執行緒的數量以節約記憶體空間.

簡單總結一下
app採用非同步程式設計是為了提高介面的流暢度以及使用者體驗,因此我們務必要把耗時的操作放到別的執行緒中去執行,千萬不要阻塞主執行緒,就這麼簡單.

轉載於:https://www.cnblogs.com/xubaoaichiyu/p/5499745.html

相關文章