iOS 开发每天分享优质文章iOS学习iOS Developer

06 GCD 并发队列

2017-09-04  本文已影响407人  CC老师_HelloCoder

03 GCD-并发队列

并发队列,异步执行

MARK:并发队列,异步执行
-(void)gcdDemo3{
    
    //1.队列-并发 DISPATCH_QUEUE_CONCURRENT 并发
    dispatch_queue_t  q = dispatch_queue_create("cc_queue",DISPATCH_QUEUE_CONCURRENT);
        
   //2.异步执行任务
   for(int i = 0;i < 10;i++)
   {
    dispatch_async(q,^{
    NSLog(@"%@ %d",[NSThread currentThread],i);
    });
   }
        
    NSLog(@"come here");

}

问题:
1.会开几条线程?
会开多条线程,线程数量是由GCD来决定
2.会顺序执行吗?
不会
3.come here的位置?
不确定,一般会靠上的位置

看起来任务执行的是顺序的。是因为线程的耗时差不多。最重要原因是,线程取任务是顺序取的。

并发队列,同步执行

MARK:并发队列,同步执行
-(void)gcdDemo4{
    
    //1.队列-并发 DISPATCH_QUEUE_CONCURRENT 并发
    dispatch_queue_t  q = dispatch_queue_create("cc_queue",DISPATCH_QUEUE_CONCURRENT);
        
   //2.同步执行任务
   for(int i = 0;i < 10;i++)
   {
    dispatch_sync(q,^{
    NSLog(@"%@ %d",[NSThread currentThread],i);
    });
   }
        
    NSLog(@"come here");

}

问题:
1.会开几条线程?
不会
2.会顺序执行吗?
顺序
3.come here的位置?
最后

对比串行队列同步任务 和 并发队列同步任务

同步执行:不会到线程池里面去获取子线程
异步执行:只要有任务,就会到线程池取子线程(主队列除外)

mainQueue是顺序执行

小结

上一篇下一篇

猜你喜欢

热点阅读