博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios GCD ---- (1)
阅读量:6756 次
发布时间:2019-06-26

本文共 2725 字,大约阅读时间需要 9 分钟。

GCD

Grand Central Dispatch (GCD)  字面意思 宏大的中央调度器  反正就是很牛逼吧 

在 gcd 中并不叫多线程开发,因为开发者并不涉及线程的开启和关闭以及调度. 只是操作任务在队列中, 所有关于线程的事都是有 GCD 帮我们去做的;

线程的开启线程的以及操作都是通过 GCD 完成的 所以开发者并不牵扯到线程的调度;只是调度的任务.具体开多少线程  什么时候开都有系统自己去操作

主队列 & 串行队列的区别?

  一个一个安排任务,队列特点:FIFO

 

  -并发队列:可以调度多个任务

    -串行队列:必须等待一个任务执行完成,再调度另外一个任务。最多只能开启一个线程。

  -主队列:以FIFO调度任务,如果主线程删共有任何任务在执行,主队列就不会调度任务,主要负责在主线程上执行任务!

 

 

全局队列

/*          ios 7      DISPATCH_QUEUE_PRIORITY_HIGH 2  高优先级     DISPATCH_QUEUE_PRIORITY_DEFAULT 0 默认优先级     DISPATCH_QUEUE_PRIORITY_LOW (-2) 低优先级     DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN 非常低 基本忽略     ios 8 用户体验度          *  - QOS_CLASS_USER_INTERACTIVE 用户交互     *  - QOS_CLASS_USER_INITIATED   用户使用     *  - QOS_CLASS_DEFAULT          默认使用     *  - QOS_CLASS_UTILITY          使用工具     *  - QOS_CLASS_BACKGROUND       后台使用          预留参数     */        dispatch_async(dispatch_get_global_queue(QOS_CLASS_DEFAULT, 0), ^{        NSLog(@"异步");    });

并发异步

/** 并发异步 开启异步线程 执行顺序 无序  第一个参数: 线程标识符  第二个参数:DISPATCH_QUEUE_CONCURRENT 并发队列
   */dispatch_queue_t q = dispatch_queue_create(queueName, DISPATCH_QUEUE_CONCURRENT);    for (int i = 0; i < 100 ; i ++ ) {        dispatch_async(q, ^{            NSLog(@"%zd, ----- %zd",i ,[NSThread isMainThread]);        });    }

并发同步

/**     并发同步 不开启线程 按顺序执行     1 线程标识符     2 线程状态, DISPATCH_QUEUE_CONCURRENT 并发队列     */    dispatch_queue_t q = dispatch_queue_create(queueName, DISPATCH_QUEUE_CONCURRENT);    for (int i = 0; i < 100 ; i ++ ) {        dispatch_sync(q, ^{            NSLog(@"%zd, ----- %zd",i ,[NSThread isMainThread]);        });    }

串行同步

/**     串行同步 不开启线程 按顺序执行          */    dispatch_queue_t q = dispatch_queue_create(queueName, DISPATCH_QUEUE_SERIAL);        for (int i = 0; i < 100 ; i ++ ) {        dispatch_sync(q, ^{            NSLog(@"%zd, ----- %zd",i ,[NSThread isMainThread]);        });    }

串行异步

/**     串行异步 开启子线程线程 按顺序执行     */    dispatch_queue_t q = dispatch_queue_create(queueName, DISPATCH_QUEUE_SERIAL);        for (int i = 0; i < 100 ; i ++ ) {        dispatch_async(q, ^{            NSLog(@"%zd, ----- %zd",i ,[NSThread isMainThread]);        });    }

 线程组

//创建线程    dispatch_queue_t q = dispatch_queue_create(queueName, DISPATCH_QUEUE_CONCURRENT);    //创建线程组    dispatch_group_t g = dispatch_group_create();        dispatch_group_async(g, q, ^{            });        //添加任务到线程组    dispatch_group_async(g, q, ^{            });    dispatch_group_async(g, q, ^{            });    dispatch_group_async(g, q, ^{            });        /**     所有任务完成在 制定的线程通知任务完成     */    dispatch_group_notify(g, dispatch_get_main_queue(), ^{            });

单次执行

/*     只执行一次     */    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{        NSLog(@"只执行一次线程");    });   //通常应用于创建单例 保证线程安全

 

转载地址:http://ebzeo.baihongyu.com/

你可能感兴趣的文章
Faster R-CNN CPU环境搭建
查看>>
IOS在线安装App
查看>>
base 镜像 - 每天5分钟玩转容器技术(10)
查看>>
六、编写第一个应用【外部nodejs调用】
查看>>
利用DNSlog回显Weblogic(CVE-2017-10271) 漏洞执行命令结果
查看>>
第16件事 愿景和目标要接地气
查看>>
细嚼慢咽 Mongoose 5
查看>>
Direct3D 11 Tutorial 7:Texture Mapping and Constant Buffers_Direct3D 11 教程7:纹理映射和常量缓冲区...
查看>>
Objective C内存管理进阶(一):实践准则
查看>>
TrackPoint_configure_ThinkPad_squeeze(06-16.2011)
查看>>
CSDN博客频道“移动开发之我见”主题征文活动
查看>>
PHPExcel常用方法汇总
查看>>
Linux System and Performance Monitoring(Network篇)
查看>>
XenServer关闭电源以后部分虚机无法启动
查看>>
IIS部署flask之实现文件上传功能
查看>>
redis开机启动
查看>>
XaaS ------什么都是一种服务
查看>>
Linux下磁盘配额
查看>>
从雅迪赞助FIFA世界杯透视体育营销趋势
查看>>
《用chsh选择shell》-linux命令五分钟系列之十二
查看>>