iOS多线程之GCD

GCD 英文全称 Grand Central Dispatch 是苹果为多核的并行运算提出的解决方案,所以会自动合理地利用更多的CPU内核(比如双核、四核),最重要的是它会自动管理线程的生命周期(创建线程、调度任务、销毁线程),完全不需要我们管理,我们只需要告诉干什么就行。同时它使用的也是 c语言,不过由于使用了 Block(Swift里叫做闭包),使得使用起来更加方便,而且灵活。

任务和队列

GCD中两个重要的概念 任务队列

任务 即操作,你想要干什么,说白了就是一段代码,在 GCD 中就是一个 Block,所以添加任务十分方便。任务有两种执行方式: 同步执行异步执行

同步(sync) 和 异步(async) 的主要区别在于会不会阻塞当前线程,直到 Block 中的任务执行完毕!

如果是 同步(sync) 操作,它会阻塞当前线程并等待 Block 中的任务执行完毕,然后当前线程才会继续往下运行。

队列 用于存放任务。一共有两种队列, 串行队列并行队列

串行队列 中的任务会根据队列的定义 FIFO 的执行,一个接一个的先进先出的进行执行。

并行队列 GCD 也会 FIFO的取出来,但不同的是,它取出来一个就会放到别的线程,然后再取出来一个又放到另一个的线程。这样由于取的动作很快,忽略不计,看起来,所有的任务都是一起执行的。不过需要注意,GCD 会根据系统资源控制并行的数量,所以如果任务很多,它并不会让所有任务同时执行

主队列 这是一个特殊的 串行队列,用于刷新 UI,任何需要刷新 UI 的工作都要在主队列执行,所以一般耗时的任务都要放到别的线程执行。

    //主队列
    dispatch_queue_t queue = dispatch_get_main_queue();
    
    //串行队列
    dispatch_queue_t queue = dispatch_queue_create("asdasda", NULL);
    dispatch_queue_t queue = dispatch_queue_create("1231ad", DISPATCH_QUEUE_SERIAL);
    //并行队列
    dispatch_queue_t queue = dispatch_queue_create("123123124as", DISPATCH_QUEUE_CONCURRENT);
    //全局队列
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    

    //同步任务
    dispatch_sync(queue, ^{
        NSLog(@"%@",[NSThread currentThread]);
    });
    //异步任务
    dispatch_async(queue, ^{
        NSLog(@"%@",[NSThread currentThread]);
    });

你可能感兴趣的:(iOS多线程之GCD)