為什麼要使用多執行緒? 學習多執行緒的目的: 將耗時操作放到後台去執行, 這也是學習多執行緒最主要的目的!
那麼怎樣能看出哪些操作是耗時較多的呢,這裡我們就來模擬一下記憶體幾個區不同的耗時情況:
所以在引入多執行緒之前,我們先來做乙個模擬耗時操作的演練。
- (void)touchesbegan:(nsset*)touches withevent:(uievent *)event
#pragma mark - 模擬耗時操作
- (void)demo
nslog(@"end");
}
列印台輸出結果為:
通過輸出結果可知:迴圈的速度非常非常快; 僅為0.025s
- (void)touchesbegan:(nsset*)touches withevent:(uievent *)event
#pragma mark - 模擬耗時操作
- (void)demo
nslog(@"end");
}
列印台輸出結果為:
通過輸出結果可知:操作記憶體的棧空間,速度同樣非常快。僅為 0.026s
- (void)touchesbegan:(nsset*)touches withevent:(uievent *)event
#pragma mark - 模擬耗時操作
- (void)demo
nslog(@"end");
}
列印台輸出結果為:
通過輸出結果可知: 操作記憶體的常量區, 速度比較快(比操作棧區稍微慢點) 0.099s
- (void)touchesbegan:(nsset*)touches withevent:(uievent *)event
#pragma mark - 模擬耗時操作
- (void)demo
nslog(@"end");
}
列印台輸出結果為:
通過輸出結果可知:操作記憶體的堆空間,速度比操作常量區慢;迴圈非常消耗cpu資源: 時間為10.597s
- (void)touchesbegan:(nsset*)touches withevent:(uievent *)event
#pragma mark - 模擬耗時操作
- (void)demo
nslog(@"end");
}
列印台輸出結果為:
從輸出結果可知:i/o操作,速度非常慢。
- (void)touchesbegan:(nsset*)touches withevent:(uievent *)event
#pragma mark - 模擬耗時操作
- (void)demo
nslog(@"end");
}
列印台輸出結果為:
由輸出結果可知:引入多執行緒技術之後,即便是i/o操作這種耗時操作,也不會造成程式卡頓。小結:
(1) 耗時操作的後果:如果只有主線程,會造成程式卡頓,使用者體驗極差。
(2) 學習多執行緒的目的:將耗時操作放到後台執行緒去執行。
(3) 通過耗時操作演練可知,操作效率的順序:
i/o操作 < 堆區 < 常量區 < 棧區。
(4) 使用@」」定義的字串儲存在常量區,使用stringwithformat拼接的字串儲存在堆區。
(5) 網路操作也屬於耗時操作,通過多執行緒技術可以將耗時的網路操作放到後台執行緒去執行,從而提高程式執行效率,改善使用者體驗。
(6) - (void)performselectorinbackground:(sel)aselector withobject:(nullable id)arg 在後台執行某方法。
思考:(1)耗時操作會對我們的應用程式產生什麼影響?
耗時操作的後果:在主線程,耗時操作會造成程式卡頓,使用者會以為程式死了,使用者體驗極差。
(2)耗時操作造成的程式卡頓問題該怎麼解決?
要想解決程式卡頓問題,就需要使用多執行緒技術,將耗時操作放到子執行緒去執行。
綜上所述,就可以看出多執行緒在我們實際開發中,是多麼的重要!!!
多執行緒的理解
1.減少了建立和銷毀執行緒的次數,每個工作執行緒都可以被重複利用,可執行多個任務。2.可以根據系統的承受能力,調整執行緒池中工作線執行緒的數目,防止因為消耗過多的記憶體,而把伺服器累趴下 每個執行緒需要大約1mb記憶體,執行緒開的越多,消耗的記憶體也就越大,最後宕機 要配置乙個執行緒池是比較複雜的,...
你C 的IQ 有多少?
okay,在論壇上我看到過這樣一道c 的面試題 如何將int p 10 初始化?a int p 10 new int 10 10 b int p 10 new int 10 10 10 c int p 10 new int 10 10 哈哈,很好的一道題,考察很多的知識點,最重要的考察你c 的iq。...
你的學習時間有多少
感覺時間過得越來越快 尤其是在大學,發現很多同學在大三下學期或剛公升入大四就已在找工作了,有的也找到了。於是很多大四的學生正兒八經地 步入 職場,開始了工作。但是,在找到工作之前,不妨替學生們算一算幾年裡用於學習的時間。按照正常的節假日計算,每年的學習天數大約是250天,再減去學期中的節假日 病事假...