GCD完整版

GCD    全称是Grand Central Dispatch,可译为“牛逼的中枢调度器”  纯C语言,提供了非常多强大的函数


GCD 有同步 异步 来执行串行队列 和 并发队列


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

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

并发:多个任务并发(同时)执行

串行:一个任务执行完毕后,再执行下一个任务


串行队列

dispatch_queue_create 创建的队列. 这些队列是串行的。正因为如此,它们可以用来完成同步机制

调用函数dispatch_queue_create就行了。函数的第一个参数是一个标签,这纯是为了debug。 Apple建议我们使用倒置域名来命名队列,比如“com.dreamingwish.subsystem.task”。这些名字会在崩溃日志中被显示出 来,也可以被调试器调用,这在调试中会很有用。第二个参数目前还不支持,传入NULL就行了。


//创建一个串行队列 队列中的block按照先进先出(FIFO)的顺序去执行,实际上为单线程执行

//先进先出


    //创建一个同步线程队列

    dispatch_queue_t serial =dispatch_queue_create("队列1",DISPATCH_QUEUE_SERIAL);//DISPATCH_QUEUE_SERIAL同步队列

    //通过异步执行这个线程队列

    

    //block里面执行的内容(方法)放到serial里面

    dispatch_async(serial, ^{

        //执行操作

        for (int i=0; i<10; i++) {

            NSLog(@"线程1");

        }

    });

    dispatch_async(serial, ^{

        NSLog(@"线程2");

    });

    

    




//创建一个并发执行队列,block被分发到多个线程去执行 

//创建并发线程队列

    dispatch_queue_t concurrent =dispatch_queue_create("并发1",DISPATCH_QUEUE_CONCURRENT);

    

    //异步执行这个并发线程队列

    dispatch_async(concurrent, ^{

        for (int i=0; i<10; i++) {

            NSLog(@"线程3");

        }

    });

    dispatch_async(concurrent, ^{

        for (int i=0; i<10; i++) {

            NSLog(@"线程4");

        }

    });



使用主队列(跟主线程相关联的队列)

dispatch_queue_t queue = dispatch_get_main_queue();




并发队列


GCD默认已经提供了全局的并发队列,供整个应用使用,不需要手动创建

使用dispatch_get_global_queue函数获得全局的并发队列


    dispatch_queue_t dispatch_get_global_queue(dispatch_queue_priority_t priority,unsigned long flags);

  

   第一个参数为优先级,第二个参数写0即可 日后使用的

   

  

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

        //方法

    });

    

    

   全局队列优先级

#define DISPATCH_QUEUE_PRIORITY_HIGH 2 // 高

#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0 // 默认(中)

#define DISPATCH_QUEUE_PRIORITY_LOW (-2) // 低

#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN // 后台


同步函数不具备开启线程的能力,无论是什么队列都不会开启线程;异步函数具备开启线程的能力,开启几条线程由队列决定(串行队列只会开启一条新的线程,并发队列会开启多条线程)。

  

     

同步函数

(1)并发队列:不会开线程

(2)串行队列:不会开线程

异步函数

(1)并发队列:能开启N条线程

(2)串行队列:开启1条线程




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园悬赏任务平台对字典管理、论坛管理、任务资讯任务资讯公告管理、接取用户管理、任务管理、任务咨询管理、任务收藏管理、任务评价管理、任务订单管理、发布用户管理、管理员管理等进行集中化处理。经过前面自己查阅的网络知识,加上自己在学校课堂上学习的知识,决定开发系统选择小程序模式这种高效率的模式完成系统功能开发。这种模式让操作员基于浏览器的方式进行网站访问,采用的主流的Java语言这种面向对象的语言进行校园悬赏任务平台程序的开发,在数据库的选择上面,选择功能强大的Mysql数据库进行数据的存放操作。校园悬赏任务平台的开发让用户查看任务信息变得容易,让管理员高效管理任务信息。 校园悬赏任务平台具有管理员角色,用户角色,这几个操作权限。 校园悬赏任务平台针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理任务信息,管理任务资讯公告信息等内容。 校园悬赏任务平台针对用户设置的功能有:查看并修改个人信息,查看任务信息,查看任务资讯公告信息等内容。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。项目管理页面提供的功能操作有:查看任务,删除任务操作,新增任务操作,修改任务操作。任务资讯公告信息管理页面提供的功能操作有:新增任务资讯公告,修改任务资讯公告,删除任务资讯公告操作。任务资讯公告类型管理页面显示所有任务资讯公告类型,在此页面既可以让管理员添加新的任务资讯公告信息类型,也能对已有的任务资讯公告类型信息执行编辑更新,失效的任务资讯公告类型信息也能让管理员快速删除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值