GCD中的并行队列和串行队列

#pragma mark - 并行队列
- ( void )gcdDemo2
{
    // 1. 并行队列
    dispatch_queue_t q = dispatch_queue_create ( "myQueue" , DISPATCH_QUEUE_CONCURRENT );
   
    // ARC 中,需要自己释放队列
//    dispatch_release(q);
   
    // 3. 同步任务,不会开启新的线程
    // 在实际开发中,同步任务可以保证执行完成之后,才让后续的异步任务开始执行,用于控制任务之间的先后顺序
    // 在后台线程中,处理 用户登录
    for ( int i = 0 ; i < 10 ; i++) {
        dispatch_sync (q, ^{
            NSLog ( @"%@ - %d" , [ NSThread currentThread ], i);
        });
    }
   
    // 2. 异步任务,会在多条线程上工作,具体开多少条线程,由系统决定
    // 仍然是按照任务添加到队列中的顺序被调度,只是执行先后可能会有差异!
    // *** 能够将耗时的操作,放到子线程中工作
    // *** 与串行队列异步任务相比,并发性能更好!但是执行的先后顺序,不固定
    for ( int i = 0 ; i < 10 ; i++) {
        dispatch_async (q, ^{
            NSLog ( @"%@ - %d" , [ NSThread currentThread ], i);
        });
    }
}


并行队列中的任务是多个任务同时执行的  
但是如果异步任务前面有同步任务 就会先执行同步任务同步任务是按顺序执行的任务等他执行完了才会执行并行中的异步任务  (可以做到阻塞 控制任务的执行顺序)

如果异步任务后面有同步任务  两个任务会并行(同时)执行


// 串行队列
- ( void )gcdDemo
{
   // dispatch_queue_t q = dispatch_queue_create("zhang", DISPATCH_QUEUE_SERIAL);
    dispatch_queue_t q = dispatch_queue_create ( "wan" , NULL );
//    #define DISPATCH_QUEUE_SERIAL NULL
//      DISPATCH_QUEUE_SERIAL  == NULL;
   
    NSLog ( @"%@" , [ NSThread currentThread ]);
    
     // 2.  异步任务  async ,能够开线程
     //  串行队列中,异步任务最多只能开一条线程,所有任务顺序执行!
     //  串行队列,异步任务,在多线程中,是斯坦福大学最推荐的一种多线程方式!
     //  优点:将任务放在其他线程中工作,每个任务顺序执行,便于调试
     //  缺点:并发能力不强,最多只能使用一条线程!
    for ( int i = 0 ; i < 10 ; i++)
    {
        dispatch_async (q, ^{
            NSLog ( @"%@-- %d" , [ NSThread currentThread ], i);
        });
    }
     // 2. 同步任务 sync( 没用处 )还是在主线程中执行 
    for ( int i = 0 ; i < 10 ; i++) {
        dispatch_sync (q, ^{
            NSLog ( @"%@---%d" , [ NSThread currentThread ], i);
        });
    }


串行队列中的任务都是按顺序执行  谁在前就先执行谁 主线程和子线程平等 一样谁在前选执行谁 执行完一个才会执行下一个任务  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值