進(jìn)程
什么是進(jìn)程
進(jìn)程是值在系統(tǒng)中正在運(yùn)行的一個(gè)應(yīng)用程序。
-
每個(gè)進(jìn)程之間是獨(dú)立的,每個(gè)進(jìn)程均運(yùn)行在其專用切受保護(hù)的內(nèi)存空間內(nèi)。
比如同時(shí)打開QQ、Xcode,系統(tǒng)就分別啟動2個(gè)進(jìn)程。
通過“活動監(jiān)視器”可以查看Mac系統(tǒng)中所開啟的進(jìn)程。
線程
什么是線程
- 1個(gè)進(jìn)程想要執(zhí)行任務(wù),就必須得有線程。(一個(gè)進(jìn)程至少有一條線程)
- 線程是進(jìn)程的基本執(zhí)行單元,一個(gè)進(jìn)程的所有任務(wù)都是在線程中執(zhí)行的。
-
比如使用酷狗播放音樂、使用迅雷下載電影,都需要在線程中執(zhí)行。
線程的串行
- 1個(gè)線程中的任務(wù)是串行執(zhí)行的。
- 如果在一個(gè)線程中執(zhí)行多個(gè)任務(wù),那么只能按順序一個(gè)一個(gè)的執(zhí)行。
-
比如在一個(gè)線程中下載3個(gè)文件。(分別為文件A、文件B、文件C)
屏幕快照 2017-06-26 上午9.39.40.png
多線程
什么是多線程?
- 1個(gè)進(jìn)程中可以開啟多條線程,每個(gè)線程并行(同時(shí))的執(zhí)行不同的任務(wù)。
- 進(jìn)程---->車間,線程--->車間工人。
- 多線程可以提高技術(shù)可以提高程序的執(zhí)行效率。
-
比如開辟3條線程分別下載3個(gè)文件(文件A,文件B,文件C)。
屏幕快照 2017-06-26 上午9.45.51.png
多線程原理
多線程原理
- 同一時(shí)間,CPU只能處理一條線程,只有一條線程在工作。
- 多線程的并發(fā)執(zhí)行,其實(shí)是CPU快速在多條線程之間切換(調(diào)度)。
- 如果CPU調(diào)度線程時(shí)間足夠快,就會造成多線程并發(fā)執(zhí)行的假象。
- 思考,如果線程足夠多,會發(fā)生什么?
- CPU會在N多線程間調(diào)度,CPU會累死,消耗大量的CPU資源。
- 每條線程被調(diào)度執(zhí)行的頻率會降低(線程的執(zhí)行效率降低)。
-
以下為3條,然后100條呢?
屏幕快照 2017-06-26 上午9.53.59.png
多線程的優(yōu)缺點(diǎn)
多線程的優(yōu)點(diǎn)
- 適當(dāng)提高程序的執(zhí)行效率。
- 能適當(dāng)提高資源利用率。
多線程的缺點(diǎn)
- 開辟線程需要占用一定的內(nèi)存空間(默認(rèn)情況,主線程占1M,子線程占用512KB),如果開辟大量線程,會占用大量的內(nèi)存空間,降低程序的性能。
- 線程越多,CPU在調(diào)度線程上的開銷越大。
- 程序設(shè)計(jì)更復(fù)雜,比如線程之間的通信、多線程數(shù)據(jù)共享。
多線程在ios開發(fā)中的應(yīng)用
什么是主線程?
- 一個(gè)iOS程序運(yùn)行后,會默認(rèn)開啟1條線程,稱為主線程或者UI線程。
主線程的主要作用
- 顯示、刷新UI界面
- 處理UI事件(比如點(diǎn)擊事件,滾動事件,拖拽事件)
主線程的使用注意
- 別將耗時(shí)的操作放到主線程中,耗時(shí)操作會卡住主線程,嚴(yán)重影響UI流程度,給用戶一種卡的壞體驗(yàn)。