線程進程的管理
線程與進程的關系
- 1、線程是CPU執行任務的基本單位,一個進程可以有多個線程,但同時只能執行一個任務。
- 2、進程就是運行中的軟件,是動態的。
- 3、一個操作系統可以對應多個進程,一個進程可以有多條線程,但至少有一個線程,同一個進程內的線程共享進程里的資源
主線程的作用
進程一啟動就自動創建,
用于顯示和刷新UI,同時處理UI事件
子線程的作用
- 1、處理耗時的操作
- 2、不能刷新UI
管理線程的方法
-
NSThread:
- NSThread是輕量級的多線程開發,使用并不復雜,但使用NSThread需要自己管理線程的聲明周期。
-
NSOperation:
1、使用NSOperation和NSOperationQueue進行多線程開發類似于線程池,只要將一個NSOperation(實際開發中需要使用其子類NSInvocationOperation、NSBlockOperation)放到NSOperationQueue這個隊列中線程就會依次啟動。NSOperationQueue負責管理、執行所有的NSOperation,在這個過程中可以更加容易管理線程總數和控制線程之間的依賴關系。
2、NSOperation有兩常用子類用于創建線程操作:NSInvocationOperation和NSBlockOperation,兩種方式本質沒有區別,但后者使用block形式進行代碼組織,使用相對方便
-
GCD(Grand Center Dispatch)
1、GCD是基于C語言開發的一套多線程開發機制,也是目前蘋果官網推薦的多線程開發方法。
2、GCD會自動管理線程的生命周期(創建線程、調度任務、銷毀線程),程序員只需要告訴GCD想要執行什么任務,不需要編寫任何線程管理代碼
3、GCD是這三種多線程開發方式中抽象層次最高的,使用起來也是最為方便的,只是基于C語言開發,并不像前兩種是面向對象開發,而是完全面向過程的。這種機制相比較于前面兩種多線程開發方式最顯著的優點就是它對于多核運算更加有效,會自動利用更多的CPU內核(比如雙核、四核)。
-
4、GCD中也有一個類似于NSOperationQueue的隊列,GCD統一管理整個隊列中的任務。但是GCD中的隊列分為并行隊列和串行隊列兩類:
1、串行隊列:只有一個線程,加入到隊列中的操作按添加順序依次執行。 2、并發隊列:有多個線程,操作進來以后他會將這些線程安排在可用的處理器上,同時保證先進來的任務優先處理。 其實在GCD中還有一個特殊隊列就是主隊列,用來執行主線程上的操作任務。