4.0 多线程基础篇
生活随笔
收集整理的這篇文章主要介紹了
4.0 多线程基础篇
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
本文并非最終版本,如有更新或更正會第一時間置頂,聯系方式詳見文末?
如果覺得本文內容過長,請前往本人 “簡書”?
?
4.0-1.1 進程
- 概念 : 進程是指在系統中正在運行的一個應用程序 (操作系統中每一個 APP 就是一個進程)
- 性質 : 每個進程之間是獨立的,每個進程均運行在其專用且受保護的內存空間內
進程為應用程序開辟獨立的內存空間;(這塊內存空間是獨立的,受保護的!進程和進程之間是互不干擾的!)
- 舉例 : 比如同時打開QQ、Xcode,系統就會分別啟動2個進程
- 查看進程 : 通過“活動監視器”可以查看Mac系統中所開啟的進程
- 所有的 UI 操作和 UI 事件都是進程
?
4.0-1.2 線程
|
| 舉例 :?比如使用酷狗播放音樂、使用迅雷下載電影,都需要在線程中執行 |
|
| 概念 : 1個線程中任務的執行是串行的(在線程中的代碼是按順序執行的!同一時間內,只能有一個代碼塊執行!) |
| 解析 : 如果要在1個線程中執行多個任務,那么只能一個一個地按順序執行這些任務 也就是說,在同一時間內,1個線程只能執行1個任務 |
| 舉例 :?比如在1個線程中下載3個文件(分別是文件A、文件B、文件C), 只能一個一個的下載 |
| 總結 :?因此,也可以認為線程是進程中的1條執行路徑 |
| 問題:為什么開啟一條新線程之后就能解決卡住主線程這個問題了呢? 答: 因為線程和線程之間是并發執行(同時執行)! |
| 概念 :?1個進程中可以開啟多條線程,每條線程可以并行(同時)執行不同的任務 |
| 優點 :?多線程技術可以提高程序的執行效率 |
| 舉例 :?比如同時開啟3條線程分別下載3個文件(分別是文件A、文件B、文件C), 則分別同時下載 |
| (1)調度:線程作為調度和分配的基本單位,進程作為擁有資源的基本單位 |
| (2)并發性:不僅進程之間可以并發執行,同一個進程的多個線程之間也可并發執行 |
| (3)擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統資源,但可以訪問隸屬于進程的資源. |
| (4)系統開銷:在創建或撤消進程時,由于系統都要為之分配和回收資源,導致系統的開銷明顯大于創建或撤消線程時的開銷。 |
| 本質 :?同一時間,CPU只能處理1條線程,只有1條線程在工作(執行) 多線程并發(同時)執行,其實是CPU快速地在多條線程之間調度(切換) |
| 原理 :?如果CPU調度線程的時間足夠快,就造成了多線程并發執行的假象 |
思考:如果線程非常非常多,會發生什么情況? 答案 : 如果線程非常多,會在多條線程之間來回切換,消耗大量的 CPU 資源
|
| iOS 8.0 主線程的默認堆棧大小也是 512K |
(1) 能適當提高程序的執行效率:
|
| (2) 能適當提高資源利用率(CPU、內存利用率) |
| (1) 開啟線程需要占用一定的內存空間(默認情況下,主線程占用1M,子線程占用512KB的棧區空間),如果開啟大量的線程,會占用大量的內存空間,降低程序的性能 |
| (2) 線程開啟越多,CPU 就需要在多條線程之間來回切換,CPU在調度線程上的開銷就越大,CPU就越累! |
| (3) 開啟線程會提高代碼的復雜性(會使應用程序增加很多代碼!代碼變多之后,程序復雜性就會提高!) 程序設計更加復雜:比如線程之間的通信、多線程的數據共享 |
| 概念 :?一個iOS程序運行后,默認會開啟1條線程,稱為“主線程”或“UI線程” (程序啟動創建的線程) |
作用 :?
|
使用注意 :?
|
解決方案 :
|
如果你覺得本篇文章對你有所幫助,請點擊右下部“推薦”,^_^ ? 作者:藍田(Loto)
出處:http://www.cnblogs.com/shorfng/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。 ?
如有疑問,請發送郵件至?shorfng@126.com?聯系我。 ? ?
轉載于:https://www.cnblogs.com/shorfng/p/5315593.html
總結
以上是生活随笔為你收集整理的4.0 多线程基础篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: perl-基础
- 下一篇: 小程序 反编译 pc微信