引言
随着多核CPU的兴起,传统的线程处理方法已经不能满足现在的需求, 为了解决这个问题,apple ios提出了新的解决方法:
- GCD grand central dispatch,serial dispatch queue按序执行,concurrent queue并发执行
- operation queues, 遵循first in, first out原则
operation queues
ios提供了NSOperation来处理这种类型的queue, NSOperation是一个abstract class,你不能直接使用它,不过它也提供了很多有用的方法。同时iOS也提供了两种NSOperation的子类:NSInvocationOperation和NSBlockOperation。使用的方法很简单,参考下面的步骤和sample code:
- 创建NSInvocationOperation
- 创建NSBlockOperation
- 实现自己的NSOperation子类,必须实现main函数
- 创建NSOperationQueue,调用addOperation来创建线程,调用相关的方法
sample code,
- (IBAction)ExecuteThread:(id)sender {
NSLog(@"ExecuteThread");
NSOperationQueue* queue = [[NSOperationQueue alloc] init];
MyNonConcurrentOperation* op = [[MyNonConcurrentOperation alloc] init];
[queue addOperations:[NSArray arrayWithObject:op] waitUntilFinished:YES];
NSLog(@"after addOPeration");
[queue addOperationWithBlock:^{
NSLog(@"addOperationWithBlock in block");
}];
NSLog(@"after addOperationWithBlock");
NSInvocationOperation* iop = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(MyInvocationTask) object:nil];
[queue addOperation:iop];
NSBlockOperation* bop = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"NSBlockOperation in block");
}];
[queue addOperation:bop];
Dispatch Queues
Dispatch Queues有如下三种类型:
- Serial, 按序执行
- Concurrent, 并发
- Main dispatch queue, 在main thread中执行