码迷,mamicode.com
首页 > 其他好文 > 详细

异步任务+并行队列情况与异步任务+串行队列(主队列)情况

时间:2016-05-18 00:29:31      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:

异步任务+并行队列

把异步任务放到并行队列进行执行,异步任务会在不同的线程中执行。

    /*异步执行+并行队列*/
    - (IBAction)clickBasic1:(UIButton *)sender {
        //全局并行队列
        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        
        //异步执行
        dispatch_async(queue, ^{
            for (int i = 0; i<2; i++) {
                NSLog(@"task1:%d",i);
            }
            NSLog(@"task1----%@",[NSThread currentThread]);
        });
        
        dispatch_async(queue, ^{
            for (int i = 0; i<2; i++) {
                NSLog(@"task2:%d",i);
            }
            NSLog(@"task2----%@",[NSThread currentThread]);
        });
        
        dispatch_async(queue, ^{
            for (int i = 0; i<2; i++) {
                NSLog(@"task3:%d",i);
            }
            NSLog(@"task3----%@",[NSThread currentThread]);
        });
        
    }

运行结果如下。异步任务+并行队列组合情况下,每个任务会在不同的线程中同时执行。

技术分享

异步任务+串行队列(主队列)

对于异步任务放在串行队列中执行时,任务只会在一个新开的线程中,按照顺序进行执行。

/*异步串行队列*/
- (IBAction)clickBasic3:(id)sender {
    //创建串行队列
    dispatch_queue_t queue = dispatch_queue_create("com.hcios", NULL);
    
    //异步执行
    dispatch_async(queue, ^{
        for (int i = 0; i<2; i++) {
            NSLog(@"task1:%d",i);
        }
        NSLog(@"task1----%@",[NSThread currentThread]);
    });
    
    dispatch_async(queue, ^{
        for (int i = 0; i<2; i++) {
            NSLog(@"task2:%d",i);
        }
        NSLog(@"task2----%@",[NSThread currentThread]);
    });
    
    dispatch_async(queue, ^{
        for (int i = 0; i<2; i++) {
            NSLog(@"task3:%d",i);
        }
        NSLog(@"task3----%@",[NSThread currentThread]);
    });
}

运行结果如下。可以看到,所有任务都在一个线程中执行,并且完成一个后,再执行下一个。

技术分享

 

异步任务+并行队列情况与异步任务+串行队列(主队列)情况

标签:

原文地址:http://www.cnblogs.com/gfxxbk/p/5503643.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!