1苟耻、進(jìn)程和線程的概念
? ? ? ?進(jìn)程是具有一定獨立功能的程序關(guān)于某個數(shù)據(jù)集合上的一次運行活動,進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨立單位.
? ? ? ?線程是進(jìn)程的一個實體,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨立運行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源(如程序計數(shù)器,一組寄存器和棧),但是它可與同屬一個進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源.
? ? ? ?一個線程可以創(chuàng)建和撤銷另一個線程;同一個進(jìn)程中的多個線程之間可以并發(fā)執(zhí)行.
2滥嘴、進(jìn)程和線程的區(qū)別
? ? ? ?進(jìn)程是具有一定獨立功能的程序關(guān)于某個數(shù)據(jù)集合上的一次運行活動,進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨立單位.
? ? ? ?線程是進(jìn)程的一個實體,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨立運行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源(如程序計數(shù)器,一組寄存器和棧),但是它可與同屬一個進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源.
? ? ? ?一個線程可以創(chuàng)建和撤銷另一個線程;同一個進(jìn)程中的多個線程之間可以并發(fā)執(zhí)行.
3嘱能、多線程
概念:1個進(jìn)程中可以開啟多條線程,每條線程可以并行(同時)執(zhí)行不同的任務(wù)
原理:同一時間彻桃,CPU只能處理1條線程,只有1條線程在工作(執(zhí)行)
? ? ? ? ?多線程并發(fā)(同時)執(zhí)行,其實是CPU快速地在多條線程之間調(diào)度(切換)
? ? ? ? ?如果CPU調(diào)度線程的時間足夠快后雷,就造成了多線程并發(fā)執(zhí)行的假象
思考:如果線程非常非常多,會發(fā)生什么情況阶牍?
? ? ? ? ? ? ? ? ? ?CPU會在N多線程之間調(diào)度喷面,CPU會累死,消耗大量的CPU資源
? ? ? ? ? ? ? ? ? ?每條線程被調(diào)度執(zhí)行的頻次會降低(線程的執(zhí)行效率降低)
優(yōu)缺點:
? ? ?優(yōu)點:
? ? ? ? ? ? ? 能適當(dāng)提高程序的執(zhí)行效率
? ? ? ? ? ? ? 能適當(dāng)提高資源利用率(CPU走孽、內(nèi)存利用率)
? ? ?缺點:
? ? ? ? ? ? ? 開啟線程需要占用一定的內(nèi)存空間(默認(rèn)情況下惧辈,主線程占用1M,子線程占用 ? 512KB)磕瓷,如果開啟大量的線程盒齿,會占用大量的內(nèi)存空間念逞,降低程序的性能
? ? ? ? ? ? ? 線程越多,CPU在調(diào)度線程上的開銷就越大
? ? ? ? ? ? ? 程序設(shè)計更加復(fù)雜:比如線程之間的通信边翁、多線程的數(shù)據(jù)共享
多線程在iOS開發(fā)中的應(yīng)用
? ? ? ? 主線程:一個iOS程序運行后翎承,默認(rèn)會開啟1條線程,稱為“主線程”或“UI線程”
? ? ? ? 主線程的主要作用
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 顯示\刷新UI界面
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 處理UI事件(比如點擊事件符匾、滾動事件叨咖、拖拽事件等)
? ? ? ? 主線程的使用注意:別將比較耗時的操作放到主線程中。
? ? ? ? 耗時操作會卡住主線程啊胶,嚴(yán)重影響UI的流暢度甸各,給用戶一種“卡”的壞體驗