业务中,我们往往需要在业务逻辑中使用线程的依赖 比如A业务要等B和C等线程处理完毕之后再去执行 以下就是线程间使用依赖的2种方法
第二种 使用NSOperation实现
//Operation实现线程依赖
NSOperationQueue * queue = [[NSOperationQueue alloc]init];
NSOperation * q1 = [NSBlockOperation blockOperationWithBlock:^{
sleep(1);
NSLog(@"测试");
} ];
NSOperation * q2 = [NSBlockOperation blockOperationWithBlock:^{
sleep(2);
NSLog(@"这是一个");
}];
NSOperation * q3 = [NSBlockOperation blockOperationWithBlock:^{
sleep(3);
NSLog(@"线程依赖");
}];
[q1 addDependency:q3];
[q3 addDependency:q2];
[queue addOperation:q1];
[queue addOperation:q2];
[queue addOperation:q3];
第二种 使用GCD实现
//GCD 实现线程依赖
dispatch_semaphore_t sephore1 = dispatch_semaphore_create(0);
dispatch_semaphore_t sephore2 = dispatch_semaphore_create(0);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"这是一个");
dispatch_semaphore_signal(sephore1);
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_semaphore_wait(sephore1, DISPATCH_TIME_FOREVER);
NSLog(@"线程依赖");
dispatch_semaphore_signal(sephore2);
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_semaphore_wait(sephore2, DISPATCH_TIME_FOREVER);
NSLog(@"测试");
});
两种方法综合下来 NSOperation 代码简单易读 操作性强 GCD 是NSOperation的底层 所以在线程性能上要好,特别如果是大量计算的线程依赖GCD性能会好一些。
网友评论