線程和多線程(二)

概述ios

多線程的概念在各個操做系統上都會接觸到,windows、Linux、mac os等等這些經常使用的操做系統,都支持多線程的概念。程序員

固然ios中也不例外,可是線程的運行節點多是咱們日常不太注意的。編程

以前簡單介紹了下單線程和多線程,下面再對單線程和多線程作下補充。windows

 

1、程序、進程、線程的區別安全

 

 

2、單線程多線程

 

 

3、多線程併發

 

4、單線程和多線程的區別負載均衡

 

 

5、多線程的做用工具

一、多線程的做用post

相信有過開發經驗的程序員都知道,當咱們把代碼寫完後,程序是一行一行逐行執行代碼的,當其中一行代碼須要執行較長時間(例如select一個教複雜的語句或者較多的數據時),那麼程序就會出現卡頓的現象,不會響應用戶的操做。

由於開啓程序後會默認開啓一個主線程,即UI線程。當處於剛纔那種狀況時,好比一個windows程序,就會出現程序暫時無響應的提示,好像電腦卡主的感受,這是很是很差的一種用戶體驗。

當咱們要避免這種狀況的時候,最好的方式就是多線程,開啓一個新的線程,用來執行一個耗時的操做,執行完成後再讓主線程來修改UI頁面(若是須要的話)。

既多線程能夠解決負載均衡問題,充分利用CPU資源,爲了提升可CPU的使用率。在多線程程序中,一個線程必須等待的時候,CPU能夠運行其它的線程而不是等待,這樣就大大提升了程序的效率。

 

2.多線程的原理

 

同一時間,CPU只能處理1條線程,只有1條線程在工做(執行)
多線程併發(同時)執行,實際上是CPU快速地在多條線程之間調度(切換)
若是CPU調度線程的時間足夠快,就形成了多線程併發執行的假象
思考:若是線程很是很是多,會發生什麼狀況?
CPU會在N多線程之間調度,CPU會累死,消耗大量的CPU資源
每條線程被調度執行的頻次會下降(線程的執行效率下降)

 

3.多線程的優缺點

 

多線程的優勢

能適當提升程序的執行效率

能適當提升資源利用率(CPU、內存利用率)

 

多線程的缺點

開啓線程須要佔用必定的內存空間(默認狀況下,主線程佔用1M,子線程佔用512KB),若是開啓大量的線程,會佔用大量的內存空間,下降程序的性能

線程越多,CPU在調度線程上的開銷就越大

程序設計更加複雜:好比線程之間的通訊、多線程的數據共享

 

4.多線程在iOS開發中的應用

主線程:一個iOS程序運行後,默認會開啓1條線程,稱爲「主線程」或「UI線程」

主線程的主要做用

顯示\刷新UI界面

處理UI事件(好比點擊事件、滾動事件、拖拽事件等)

 

主線程的使用注意:別將比較耗時的操做放到主線程中。

耗時操做會卡住主線程,嚴重影響UI的流暢度,給用戶一種「卡」的壞體驗 

 

 

五、用到多線程的地方

在不少時候咱們呢可能沒有用到多線程,或者不清楚何時用多線程,那麼在什麼地方會用到多線程呢?

大多狀況下,要用到多線程的主要是須要處理大量的IO操做時或處理的狀況須要花大量的時間等等,好比:讀寫文 件、視頻圖像的採集、處理、顯示、保存等。 

 

六、iOS有三種主要的實現多線程的方法

一、NSThread。二、NSOperation。三、GCD。 

 

七、多線程安全的解決方案

使用鎖:鎖是線程編程同步工具的基礎。鎖可讓你很容易保護代碼中一大塊區域以便你能夠確保代碼的正 確性。

一、使用POSIX互斥鎖;

二、使用NSLock類;

三、使用@synchronized指令等。 

 

互斥鎖的優缺點

優勢:能有效防止因多線程搶奪資源形成的數據安全問題

缺點:須要消耗大量的CPU資源

 

互斥鎖的使用前提:多條線程搶奪同一塊資源 

相關專業術語:線程同步,多條線程按順序地執行任務

互斥鎖,就是使用了線程同步技術

 

 

一、建立NSThread的兩種方式

相關文章
相關標籤/搜索