刀哥多线程GCD核心概念gcd
GCD
GCD 核心概念
- 将
任务
添加到队列
,并且指定执行任务的函数
- 任务使用
block
封装
- 任务的
block
没有参数也没有返回值
- 任务的
- 执行任务的函数
- 异步
dispatch_async
- 不用等待当前语句执行完毕,就可以执行下一条语句
- 会开启线程执行
block
的任务 异步
是多线程的代名词
- 同步
dispatch_sync
- 必须等待当前语句执行完毕,才会执行下一条语句
- 不会开启线程
- 在当前执行
block
的任务
- 异步
- 队列 - 负责调度任务
- 串行队列
- 一次只能”调度”一个任务
dispatch_queue_create("itheima", NULL);
- 并发队列
- 一次可以”调度”多个任务
dispatch_queue_create("itheima", DISPATCH_QUEUE_CONCURRENT);
- 主队列
- 专门用来在主线程上调度任务的队列
- 不会开启线程
- 在
主线程空闲时
才会调度队列中的任务在主线程执行 dispatch_get_main_queue();
- 串行队列
阶段性小结
- 开不开线程由
执行任务的函数
决定异步
开,异步
是多线程的代名词同步
不开
- 开几条线程由
队列
决定
串行队列
开一条线程并发队列
开多条线程,具体能开的线程数量由底层线程池决定
- iOS 8.0 之后,GCD 能够开启非常多的线程
- iOS 7.0 以及之前,GCD 通常只会开启 5~6 条线程
- 队列的选择
多线程的目的:将耗时的操作放在后台执行!
串行队列,只开一条线程,所有任务顺序执行
- 如果任务有先后执行顺序的要求
- 效率低 -> 执行慢 -> “省电”
- 有的时候,用户其实不希望太快!例如使用 3G 流量,”省钱”
- 并发队列,会开启多条线程,所有任务不按照顺序执行
- 如果任务没有先后执行顺序的要求
- 效率高 -> 执行快 -> “费电”
- WIFI,包月
实际开发中,线程数量如何决定?
- WIFI 线程数
6
条 - 3G / 4G 移动开发的时候,
2~3
条,再多会费电费钱!
刀哥多线程GCD核心概念gcd的更多相关文章
- ios多线程操作(四)—— GCD核心概念
GCD全称Grand Central Dispatch.可译为"大派发中枢调度器",以纯C语言写成,提供了很多很强大的函数.GCD是苹果公司为多核的并行运算提出的解决方式,它能够自 ...
- IOS多线程 总结 -------------核心代码(GCD)
//NSObject //在子线程中执行代码 // 参数1: 执行的方法 (最多有一个参数,没有返回值) //参数2: 传递给方法的参数 [self performSelectorInBackgrou ...
- 刀哥多线程之一次性代码gcd-11-once
一次性执行 有的时候,在程序开发中,有些代码只想从程序启动就只执行一次,典型的应用场景就是"单例" // MARK: 一次性执行 - (void)once { static dis ...
- 刀哥多线程笔记之gcd-02-block
block 概念 block 是 C 语言的 是一种数据类型,可以当作参数传递 是一组预先准备好的代码,在需要的时候执行 动画 block 回顾 self.demoView.center = CGPo ...
- 刀哥多线程之调度组gcd-12-group
调度组 常规用法 - (void)group1 { // 1. 调度组 dispatch_group_t group = dispatch_group_create(); // 2. 队列 dispa ...
- 刀哥多线程现操作gcd-10-delay
延迟操作 // MARK: - 延迟执行 - (void)delay { /** 从现在开始,经过多少纳秒,由"队列"调度异步执行 block 中的代码 参数 1. when 从现 ...
- 刀哥多线程全局队列gcd-09-global_queue
全局队列 是系统为了方便程序员开发提供的,其工作表现与并发队列一致 全局队列 & 并发队列的区别 全局队列 没有名称 无论 MRC & ARC 都不需要考虑释放 日常开发中,建议使用& ...
- 刀哥多线程Barrier异步gcd-08-barrier_async
Barrier 异步 主要用于在多个异步操作完成之后,统一对非线程安全的对象进行更新 适合于大规模的 I/O 操作 代码演练 准备工作 @interface ViewController () { / ...
- 刀哥多线程同步任务作用gcd-07-sync_task
同步任务的作用 同步任务,可以让其他异步执行的任务,依赖某一个同步任务 例如:在用户登录之后,再异步下载文件! - (void)gcdDemo1 { dispatch_queue_t queue = ...
随机推荐
- 图论Hrbust1708许可证
http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1708 #include<st ...
- js面向过程改写成面向对象--通用方法
响亮的标题:一个万能的,保底的.面向过程改写成面向对象的方法 前提朗读:很多刚接触js面向对象的时候都不知道如何能快速的写出一个面向对象的程序,这个是必然的现象,不是每一位学js的一上来就会写面向对象 ...
- CODESOFT 2015中的条形码对象该如何创建
CODESOFT条码设计软件提供了大量适应行业要求的符号,以及创建二维条形码的选项.用户可以通过条形码对话框选择符号.定义其属性以及输入要编码的消息.下面小编带大家具体学习下如何在CODESOFT ...
- 关于Flash Builder
ASDoc路径: X:\Program Files\Adobe\Adobe Flash Builder 4.7 (64 Bit)\eclipse\plugins\com.adobe.flexbuild ...
- 跟我学 NHibernate (一)
NHibernate 是一个强大的 ORM 框架,本博文主要就 NHibernate 的使用方法及语法做一些简单的介绍. 1.NHibernate 语法 新建一个类,命名为: QueryCrit ...
- 学习资料 数据查询语言DQL
数据查询语言DQL介绍及其应用: 查询是SQL语言的核心,SQL语言只提供唯一一个用于数据库查询的语句,即SELECT语句.用于表达SQL查询的SELECT语句是功能最强也是最复杂的SQL语句,它提供 ...
- 洛谷P2725 邮票 Stamps
P2725 邮票 Stamps 37通过 224提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 为什么RE?在codevs上AC的. 题目背景 给一组 ...
- No.010 Regular Expression Matching
10. Regular Expression Matching Total Accepted: 89193 Total Submissions: 395441 Difficulty: Hard Imp ...
- 第九周java学习总结
20145306<java程序设计>第九周学习总结 教材学习内容总结 第十六章 一.JDBC入门 1.JDBC简介 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据 ...
- Mybatis SQL语句查询
MyBatis中使用in查询时的注意事项 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach一共有三种类型,分别为List,[](array),Map三种. ...