首先我们了解什么是多线程。
程序 :一个由源代码 生成的可执行应用(比如QQ,微信...)
进程:一个正在运行的程序可以看成一个进程,进程负责去向手机系统申请资源,同时将这些资源调度 给我们的线程
线程:可以看成是可以运行的代码段,这些代码段需要的资源,比如内存,都需要去向进程申请.
多线程,拥有多个线程的程序叫做多线程程序
单线程,只有一个线程的程序叫做单线程程序,如果是单线程则肯定是主线程
除了主线程之外的线程都是子线程
只有一个主线程
子线程之间是并行执行的,也就是说是同时执行的
-
NSThread
NSThread 比其他两个轻量级,需要自己管理线程的生命周期,线程同步。线程同步对数据的加锁会有一定的系统开销。//创建一个线程,并指定一个这个线程中要做的事件
NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(for100000ByThread) object:nil];
thread.name = @"我是线程";
// 激活我们创建的线程,开始工作
[thread start];
//线程睡眠一段时间
[NSThread sleepForTimeInterval:5]; - Cocoa NSOperation
不需要关心线程管理, 数据同步的事情,可以把精力放在自己需要执行的操作上。 Cocoa operation相关的类是NSOperation, NSOperationQueue.
NSOperation是个抽象类,使用它必须用它的子类,可以实现它或者使用它定义好的两个子
类: NSInvocationOperation和NSBlockOperation. 创建NSOperation子类的对象,把对象添加到NSOperationQueue队列里执行。
//利用NSBlockOperation 去创建一个操作
NSBlockOperation blockOperation = [NSBlockOperation blockOperationWithBlock:^{
//这个操作要干得事情
[self action];
}];
//模拟一个文件下载
NSBlockOperation fileDownload = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"开始下载文件--%@",[NSThread currentThread]);
[NSThread sleepForTimeInterval:0.1];
NSLog(@"下载完成%@",[NSThread currentThread]);
}];
//创建队列
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
//最大同步数 放置在添加操作之前,这样才会生效
queue.maxConcurrentOperationCount = 2;
//我们向队列中添加操作后,队列会自动去让操作进入一个子线程区去操作,至于去哪个子线程就是队列干得事情了,不需要我们去指定,任务进入线程是随机的,
//向队列中添加操作
[queue addOperation:blockOperation];
[queue addOperation:fileDownload];
- Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法。在iOS4.0开 始之后才能使用。GCD是一个替代诸如NSThread, NSOperationQueue, NSInvocationOperation 等技术的很高效和强大的技术。现在的iOS系统都升级到7了,所以不用担心该技术不能使用。
//GCD 队列分2种,
//serial (串行队列) : 一次只能执行一个任务,必须上一个任务执行完,下一次任务才开始,遵循 FIFO 原则 --> 哪个任务先进入这个队列就先执行
//concurrent (并行队列) : 队列会根据当前系统的情况(内存...)来创建子线程,同时将这些任务进行分发
//dispatch_queue_t 一个队列
//GCD 为我们提供了一个主队列 dispatch_get_main_queue
//这个队列主要运行在主线程中
//dispatch_queue_t queue = dispatch_get_main_queue();
//主队列中是串行,在主队列中添加的任务必须依次执行。
共同学习,写下你的评论
评论加载中...
作者其他优质文章