線程進程的管理
線程與進程的關系
- 1乖寒、線程是CPU執(zhí)行任務的基本單位猴蹂,一個進程可以有多個線程,但同時只能執(zhí)行一個任務楣嘁。
- 2磅轻、進程就是運行中的軟件,是動態(tài)的逐虚。
- 3聋溜、一個操作系統(tǒng)可以對應多個進程,一個進程可以有多條線程,但至少有一個線程,同一個進程內(nèi)的線程共享進程里的資源
主線程的作用
進程一啟動就自動創(chuàng)建叭爱,
用于顯示和刷新UI撮躁,同時處理UI事件
子線程的作用
- 1、處理耗時的操作
- 2买雾、不能刷新UI
管理線程的方法
-
NSThread:
- NSThread是輕量級的多線程開發(fā)把曼,使用并不復雜,但使用NSThread需要自己管理線程的聲明周期漓穿。
-
NSOperation:
1嗤军、使用NSOperation和NSOperationQueue進行多線程開發(fā)類似于線程池,只要將一個NSOperation(實際開發(fā)中需要使用其子類NSInvocationOperation晃危、NSBlockOperation)放到NSOperationQueue這個隊列中線程就會依次啟動叙赚。NSOperationQueue負責管理、執(zhí)行所有的NSOperation僚饭,在這個過程中可以更加容易管理線程總數(shù)和控制線程之間的依賴關系震叮。
2、NSOperation有兩常用子類用于創(chuàng)建線程操作:NSInvocationOperation和NSBlockOperation鳍鸵,兩種方式本質(zhì)沒有區(qū)別冤荆,但后者使用block形式進行代碼組織,使用相對方便
-
GCD(Grand Center Dispatch)
1权纤、GCD是基于C語言開發(fā)的一套多線程開發(fā)機制钓简,也是目前蘋果官網(wǎng)推薦的多線程開發(fā)方法。
2汹想、GCD會自動管理線程的生命周期(創(chuàng)建線程外邓、調(diào)度任務、銷毀線程)古掏,程序員只需要告訴GCD想要執(zhí)行什么任務损话,不需要編寫任何線程管理代碼
3、GCD是這三種多線程開發(fā)方式中抽象層次最高的,使用起來也是最為方便的,只是基于C語言開發(fā),并不像前兩種是面向?qū)ο箝_發(fā)律秃,而是完全面向過程的。這種機制相比較于前面兩種多線程開發(fā)方式最顯著的優(yōu)點就是它對于多核運算更加有效忘闻,會自動利用更多的CPU內(nèi)核(比如雙核、四核)恋博。
-
4齐佳、GCD中也有一個類似于NSOperationQueue的隊列,GCD統(tǒng)一管理整個隊列中的任務债沮。但是GCD中的隊列分為并行隊列和串行隊列兩類:
1炼吴、串行隊列:只有一個線程,加入到隊列中的操作按添加順序依次執(zhí)行疫衩。 2硅蹦、并發(fā)隊列:有多個線程,操作進來以后他會將這些線程安排在可用的處理器上闷煤,同時保證先進來的任務優(yōu)先處理童芹。 其實在GCD中還有一個特殊隊列就是主隊列,用來執(zhí)行主線程上的操作任務曹傀。