關(guān)于進程和線程的理解

一、進程與線程

1、什么是進程?

  • 進程是指在系統(tǒng)中正在運行的一個應(yīng)用程序,它是系統(tǒng)分配資源的基本單元。
  • 每個進程之間是獨立的,均運行在其專用且受保護的內(nèi)存空間內(nèi),擁有獨立運行所需的全部資源。
image

比如同時打開QQ、Xcode,系統(tǒng)就會分別啟動2個進程,通過“活動監(jiān)視器”可以查看Mac系統(tǒng)中所開啟的進程。

2、什么是線程?

  • 線程是CPU調(diào)度的最小單元,也是進程的基本執(zhí)行單元,進程(程序)的所有任務(wù)都在線程中執(zhí)行,線程是進程中的一個實體。
  • 一個進程想要執(zhí)行任務(wù),必須至少有一條線程。應(yīng)用程序啟動的時候,系統(tǒng)會默認(rèn)開啟一條線程,也就是主線程。
  • 同一個進程內(nèi)的線程共享進程資源。

比如使用酷狗播放音樂、使用迅雷下載電影,都需要在線程中執(zhí)行

image

3、線程的串行

一個線程中任務(wù)的執(zhí)行是串行的,如果要在一個線程中執(zhí)行多個任務(wù),那么只能一個一個地按順序執(zhí)行這些任務(wù),也就是說,在同一時間內(nèi),一個線程只能執(zhí)行一個任務(wù)。

比如在一個線程中下載3個文件(分別是文件A、文件B、文件C)

image

二、多進程與多線程

1、多進程

打開mac的活動監(jiān)視器,可以看到很多個進程同時運行

  • 進程是程序在計算機上的一次執(zhí)行活動。當(dāng)你運行一個程序,你就啟動了一個進程。顯然,程序是死的(靜態(tài)的),進程是活的(動態(tài)的)。
  • 進程可以分為系統(tǒng)進程和用戶進程。凡是用于完成操作系統(tǒng)的各種功能的進程就是系統(tǒng)進程,它們就是處于運行狀態(tài)下的操作系統(tǒng)本身;所有由用戶啟動的進程都是用戶進程。
  • 進程又被細(xì)化為線程,也就是一個進程下有多個能獨立運行的更小的單元。在同一個時間里,一個計算機系統(tǒng)中如果允許兩個或兩個以上的進程處于運行狀態(tài),這便是多進程。

2、多線程

一個進程中可以開啟多條線程,每條線程可以并行(同時)執(zhí)行不同的任務(wù),多線程技術(shù)可以提高程序的執(zhí)行效率(進程→車間,線程→車間工人)

比如同時開啟3條線程分別下載3個文件(分別是文件A、文件B、文件C)

image
image

3、多線程的原理

同一時間,CPU只能處理一條線程,只有一條線程在工作(執(zhí)行),多線程并發(fā)(同時)執(zhí)行,其實是CPU快速地在多條線程之間調(diào)度(切換),如果CPU調(diào)度線程的時間足夠快,就造成了多線程并發(fā)執(zhí)行的假象。

4、思考:如果線程非常非常多,會發(fā)生什么情況?

答:CPU會在N多線程之間調(diào)度,消耗大量的CPU資源,每條線程被調(diào)度執(zhí)行的頻次會降低(線程的執(zhí)行效率降低)

5、多線程的優(yōu)點

  • 能適當(dāng)提高程序的執(zhí)行效率
  • 能適當(dāng)提高資源利用率(CPU、內(nèi)存利用率)

6、多線程的缺點

  • 開啟線程需要占用一定的內(nèi)存空間(默認(rèn)情況下,主線程占用1M,子線程占用512KB),如果開啟大量的線程,會占用大量的內(nèi)存空間,降低程序的性能
  • 線程越多,CPU在調(diào)度線程上的開銷就越大
  • 程序設(shè)計更加復(fù)雜:比如線程之間的通信、多線程的數(shù)據(jù)共享

7、多線程在iOS開發(fā)中的應(yīng)用

主線程:一個iOS程序運行后,默認(rèn)會開啟一條線程,稱為“主線程”或“UI線程”
主要作用:顯示\刷新UI界面,處理UI事件(比如點擊事件、滾動事件、拖拽事件等)
使用注意:別將比較耗時的操作放到主線程中。耗時操作會卡住主線程,嚴(yán)重影響UI的流暢度,給用戶一種“卡”的壞體驗

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容