GCD

作者: yxc木易星辰 | 来源:发表于2017-11-27 11:36 被阅读0次

    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的位置?

    最后

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

    2者之间的结果是一样的。只要同步执行,不管是串行还是并行都是 一样的。

    同步执行:不会到线程池里面去获取子线程

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

    mainQueue是顺序执行

    小结

    开不开线程,取决去任务的函数,同步不开,异步才能开;

    开几条线程,取决于队列,串行开一条,并发可以开多条(异步执行)

    相关文章

      网友评论

          本文标题:GCD

          本文链接:https://www.haomeiwen.com/subject/szenvxtx.html