進程:
1.正在進行中的程序被稱爲進程,負責程序運行的內存分配
2.每個進程都有自己獨立的虛擬空間
線程:
1.線程是進程中一個獨立的執行路徑(控制單元)
2.一個進程中至少包含一條線程,即主線程
3.可以將耗時的執行路徑(如:網絡請求)放在其他線程中執行
總結:創建線程的目的就是爲了開啓一條新的執行路徑,運行指定的代碼,與主線程的代碼實現同時運行。
主線程棧區有1M,而子線程只有512K。而子線程在未完成進程任務的時候,是不能被殺死的,但是可以將其休眠,暫停。當子線程的進程任務
完成之後,系統纔會回收子線程。
多線程的優勢:
1.充分發揮多核處理器優勢,將不同線程任務分配給不同的處理器,真正進入“並行運算”狀態。
2.將耗時的人物分配到其他線程執行,由主線程負責統一更新界面會使應用更加流暢,用戶體驗更好
3.將硬件處理器的數量增加,程序會運行更快,而程序無需做任何調整
弊端:新建線程會消耗內存空間和CPU時間,線程太多會降低系統的運行性能
誤區:多線程技術是爲了併發執行多項任務,不會提高單個算法本身的執行效率
iOS中三種多線程技術:
NSThread:
1.使用NSThread對象建立一個線程非常方便
2.使用NSThread管理多個線程非常困難,不推薦使用
3.使用最多的【NSThread currentThread 】獲取當前線程,適用於NSThread,NSOperation,GCD這三種技術
NSOperation/NSOperation Queue:
1.是使用GCD實現的一套OC的API
2.是面向對象的線程技術
3.提供了一些在GCD中不容易實現的特性,如:限制最大的 併發數量,操作之間的依賴關係
GCD(Grand Central Dispatch)
1.是基於C語言的底層API
2.是Block定義任務,使用起來靈活便捷
3.提供了更多的控制能力以及操作隊列中所不能使用的底層函數。