美文网首页
GCD之简介

GCD之简介

作者: xxxxxxxxx_ios | 来源:发表于2018-12-25 15:56 被阅读0次
    1.多线程方案介绍
    常用多线程方案
    2.GCD中常用函数
    • 同步执行
    dispatch_queue_t queue = dispatch_queue_create("serialQueue", DISPATCH_QUEUE_SERIAL);
    dispatch_sync(queue, ^{
    
    });
    
    
    • 异步执行
    dispatch_queue_t queue = dispatch_queue_create("concurrentQueue", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queue, ^{
            
    });
    
    3.GCD中常用队列
    • 并发队列
      可以让多个任务并发(同时)执行(自动开启多个线程同时执行任务),并发功能只有在异步(dispatch_async)函数下才有效
    • 串行队列
      让任务一个接着一个地执行(一个任务执行完毕后,再执行下一个任务)
    4.术语解释

    同步:在当前线程中执行任务,不具备开启新线程的能力。
    异步:在新的线程中执行任务,具备开启新线程的能力。
    并发:多个任务并发(同时)执行。
    串行:一个任务执行完毕后,再执行下一个任务。

    5.各种队列的执行结果
    执行结果

    注意:使用sync函数往当前串行队列中添加任务,会卡住当前的串行队列(产生死锁)

    6.队列组的使用

    思考:如何使用GCD实现,异步并发执行任务1,任务2,等任务1任务2执行完毕,回到主线程执行任务3

    dispatch_group_t group = dispatch_group_create();
        dispatch_queue_t queue = dispatch_queue_create("concurrentQueue", DISPATCH_QUEUE_CONCURRENT);
        dispatch_group_async(group, queue, ^{
            NSLog(@"-- 任务1");
        });
        dispatch_group_async(group, queue, ^{
            NSLog(@"-- 任务2");
        });
        dispatch_group_notify(group, queue, ^{
           
            dispatch_async(dispatch_get_main_queue(), ^{
               NSLog(@"-- 任务3");
            });
        });
    

    参考:MJ老师的视频课程。

    相关文章

      网友评论

          本文标题:GCD之简介

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