GCD的一些知识

来源:互联网 发布:aria2c mac 编辑:程序博客网 时间:2024/05/22 01:40

GCD 

全称是Grand Central Dispath 被译牛逼的中枢调度器

它是用纯c语言编写的函数库,为苹果多核并行运行提供解决方案

优点:能够更多的使用多核心

自动管理线程的生命周期,创建线程,调度线程,销毁线程,

程序猿只需要告诉做什么任务就行了,不需要编写线程相关的代码


GCD中有两个用来执行任务的常用函数

同步:必须在当前线程中执行任务,不具备开启新线程的能力

异步:可以在新线程中执行任务,具备开启新线程的能力


sync 

async


GCD 的队列可以分为2个类型


并发队列

可以让多个任务并发(同时)执行(自动开启多个线程同时执行任务)

并发功能在异步函数下才有效

 同步函数 并发队列 不开启新线程 任务串行执行任务

异步函数 并发队列 开启新线程 同时任务执行

同步函数 串行队列 不开启新线程 任务串行执行

异步函数 串行队列 开启一条线程 任务串行执行


全局并发队列 

 异步函数 下 开启新线程 任务并发执行 


同步函数下 不开启新线程 任务串行执行 


主队列 是 特殊串行队列

同步函数:会发生死锁

异步函数:不会开启新的新线程,不会发生死锁,串行执行任务 

GCD线程间的通信 就是回到主线程中刷新UI

快速迭代 dipath_apply

dispatch_apply(33,dispatch_get_global_queue(0,0), ^(size_t i) {

        NSLog(@"%d---%@",i,[NSThreadcurrentThread]);

});

队列组

    dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{

        NSLog(@"队列组1");

    });

    

    dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{

        NSLog(@"队列组2");


    });

    

    dispatch_group_notify(group,dispatch_get_global_queue(0,0), ^{

        NSLog(@"队列组结束");

    });

    

    



    












原创粉丝点击