進程
-
什么是進程
- 進程是指在系統中正在運行的一個應用程序
- 每個進程之間是獨立的,每個進程均運行在其專用且受保護的內存空間內
例如:同時打開xcode、QQ、微信,系統會分別啟動一個進程
通過"活動監視器"可以查看mac系統中所有進程
線程
- 什么是線程
- 每個進程要執行任務,必須要有線程(每個進程至少要有一條線程)
-
一個進行(程序)的所有任務都在線程中執行
實例圖
線程的串行
一個線程中任務的執行是串行的
如果要在一個線程中執行多個任務,那么只能一個一個地按順序執行這些任務
也就是說,在同一時間內,一個線程只能執行一個任務
-
比如在一個線程中下載三個文件(分別為文件A、文件B、文件C)
線程串行執行
多線程
什么是多線程
一個進程中可以開啟多條線程,每條線程可以并行(同時)執行不同的任務
進程和線程之間的關系:進程--->車間, 線程--->車間工人
多線程技術可以提高程序的執行效率
-
比如同時開啟3條線程分別下載3個文件(分別是文件A、文件B、文件C)
多線程并行
多線程的原理
多線程的原理
- 同一時間,CPU只能處理一條線程,只有一個線程在工作(執行)
- 多線程并發(同時)執行,其實是CPU快速地在多線程之間調度(切換)
- 如果CPU調度線程的時間足夠快,就造成了多線程并發執行的假象
思考:如果線程非常多,會發生什么情況
- CPU會在N多線程之間調度,CPU會累死,消耗大量的CPU資源
- 每條線程被調度執行的頻次會降低(線程的執行效率降低)
多線程的優缺點
多線程有點
- 能適當提高程序的執行效率
- 能適當提高資源利用率(CPU、內存的利用率)
多線程缺點
- 創建子線程室友開銷的,iOS下主要成本包括:內核數據結構(大約1KB)、棧空間(子線程512K、主線程1MB,也可以使用-setStackSize:設置,但必須是4K的倍數,而且最小是16K),創建線程大約需要90毫秒的創建時間
- 如果開啟大量線程,會降低程序的性能
- 線程越多,CPU在調度線程的開銷就越大
- 程序設計更加復雜:比如線程之間的通信、多線程的數據共享
多線程在iOS開發中的應用
-
什么是主線程
- 一個iOS程序運行后,默認會開啟1條線程,稱為“主線程” 或 “UI線程”
-
主線程的主要作用
- 顯示或刷新UI界面
- 處理UI事件(比如點擊事件、滾動事件等)
-
主線程的使用注意
- 不要將比較耗時的操作放到主線程中
- 耗時操作會卡主線程,嚴重影響UI的流暢度,給用戶一種“卡頓”的壞體驗
iOS中多線程的實現方案
iOS中多線程實現方案.png