多线程(一)

2016-12-10  本文已影响0人  Garruk

一.线程和进程

进程::系统中正在运行的一个程序,每个程序独立运行在自己特定的受保护的内存空间内。

从活动监视器上可以很直观的看到正在运行的进程名称,和占得CPU百分比。

线程:一个进程想要执行任务,必须有线程,每一个进程最少有一条线程。线程是进程的基本执行单元,一个进程的所有任务都在线程中执行。

可以看出有3个线程

二.线程的串行和并行

串行:在一个线程中执行多个任务,会按照顺序一个一个去执行。在同一时间内,只会执行一个任务。

并行:在一个线程执行多个任务时,会同时执行多个不同的任务。

多线程的原理:同一时间,CPU只能处理一条线程,只有一条线程在执行。多线程执行,是CPU快速的在多线程之间调度。如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象。

三.多线程的优缺点

优点:能够适当提高程序的执行效率,能适当的提高资源利用率(CPU,内存利用率)

缺点:开启线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果大量开启线程,会占用大量内存空间,降低程序的性能线程越多,CPU在调度线程的开销就越大.程序设计会更加复杂,比如线程之间的通讯,多线程的数据共享。

四:多线程开发中的运用

在程序运行后会默认开启一条线程,称为主线程或UI线程,主要负责UI的刷新,处理UI事件.

而在子线程负责数据的加载处理。

主线程使用注意:耗时操作别放到主线程中,耗时操作会严重影响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");

}

如果在主线程中调用longOperation方法,由于在方法中我们打印i的值.这个操作是耗时操作.会大量消耗CPU性能.当运行程序,我们点击storyboard中的控件时,会发现控件没有进行响应,给用户“卡”的体验.而当我们开启子线程,将longOperation放入子线程中,再点击控件时,控件进行响应动作.

上一篇 下一篇

猜你喜欢

热点阅读