一.線程和進程
進程::系統(tǒng)中正在運行的一個程序良蒸,每個程序獨立運行在自己特定的受保護的內(nèi)存空間內(nèi)芥吟。
從活動監(jiān)視器上可以很直觀的看到正在運行的進程名稱架谎,和占得CPU百分比。
線程:一個進程想要執(zhí)行任務瓜客,必須有線程,每一個進程最少有一條線程竿开。線程是進程的基本執(zhí)行單元谱仪,一個進程的所有任務都在線程中執(zhí)行。
可以看出有3個線程
二.線程的串行和并行
串行:在一個線程中執(zhí)行多個任務否彩,會按照順序一個一個去執(zhí)行疯攒。在同一時間內(nèi),只會執(zhí)行一個任務列荔。
并行:在一個線程執(zhí)行多個任務時敬尺,會同時執(zhí)行多個不同的任務。
多線程的原理:同一時間,CPU只能處理一條線程贴浙,只有一條線程在執(zhí)行砂吞。多線程執(zhí)行,是CPU快速的在多線程之間調(diào)度崎溃。如果CPU調(diào)度線程的時間足夠快蜻直,就造成了多線程并發(fā)執(zhí)行的假象。
三.多線程的優(yōu)缺點
優(yōu)點:能夠適當提高程序的執(zhí)行效率笨奠,能適當?shù)奶岣哔Y源利用率(CPU,內(nèi)存利用率)
缺點:開啟線程需要占用一定的內(nèi)存空間(默認情況下袭蝗,主線程占用1M,子線程占用512KB),如果大量開啟線程,會占用大量內(nèi)存空間,降低程序的性能線程越多,CPU在調(diào)度線程的開銷就越大.程序設計會更加復雜般婆,比如線程之間的通訊到腥,多線程的數(shù)據(jù)共享。
四:多線程開發(fā)中的運用
在程序運行后會默認開啟一條線程蔚袍,稱為主線程或UI線程,主要負責UI的刷新,處理UI事件.
而在子線程負責數(shù)據(jù)的加載處理乡范。
主線程使用注意:耗時操作別放到主線程中,耗時操作會嚴重影響UI的流暢度,給用戶一種“卡”的體驗.
五.代碼示例:
我們在storyboard中拖入開關控件,或者滑動條控件.
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event{
[self performSelectorInBackground:@selector(longOperation) withObject:nil];
}
- (void)longOperation{
NSLog(@"start");
for (int i = 0; i < 1000000; ++i) {
NSLog(@"%d",i);
}
NSLog(@"end");
}
如果在主線程中調(diào)用longOperation方法,由于在方法中我們打印i的值.這個操作是耗時操作.會大量消耗CPU性能.當運行程序,我們點擊storyboard中的控件時,會發(fā)現(xiàn)控件沒有進行響應,給用戶“卡”的體驗.而當我們開啟子線程,將longOperation放入子線程中,再點擊控件時,控件進行響應動作.