在 GCD 中,加入了两个非常重要的概念: 任务 和 队列

  • 任务:即操作,你想要干什么,说白了就是一段代码,在 GCD 中就是一个 Block,所以添加任务十分方便。任务有两种执行方式: 同步执行 和 异步执行,他们之间的区别是 是否会创建新的线程。

同步执行:只要是同步执行的任务,都会在当前线程执行,不会另开线程。

异步执行:只要是异步执行的任务,都会另开线程,在别的线程执行。

更新:

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

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

如果是 异步(async)操作,当前线程会直接往下执行,它不会阻塞当前线程。

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

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

更新:放到串行队列的任务,GCD 会 FIFO(先进先出) 地取出来一个,执行一个,然后取下一个,这样一个一个的执行。

并行队列 中的任务根据同步或异步有不同的执行方式。虽然很绕,但请看下表:

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

最新文章

  1. javascript模块化应用
  2. mysql的一些基本操作语句
  3. 转 CSS hack:针对IE6,IE7,firefox显示不同效果
  4. pager分页框架体会
  5. 后缀树系列一:概念以及实现原理( the Ukkonen algorithm)
  6. git 创建远程仓库
  7. 转:Windows下载Android源码
  8. 8.2.1.7 Use of Index Extensions 使用索引扩展
  9. c++11 auto
  10. 十大最值得注意的MySQL变量
  11. WEB ICON 的探讨
  12. Python 基础 二
  13. 菜鸟版JAVA设计模式—外观模式
  14. [DeeplearningAI笔记]ML strategy_2_1误差分析
  15. net读取文件字节流要注意的小细节
  16. python框架django-web层
  17. hbuilder下用plus.barcode.Barcode做二维码扫描,当二维码容器的高度设置过低时,启动扫描会发生闪退
  18. 学生与部门管理app-产品功能与界面的简单设计
  19. 一本通1548【例 2】A Simple Problem with Integers
  20. c++中map按key和value排序

热门文章

  1. 【NOIP16提高组】换教室
  2. 【前端】Nodejs给没有引号的json数据添加引号
  3. .NETFramework:HttpContext
  4. windows8如何显示开始菜单
  5. 3、HTML的body内标签1
  6. vim的visual可视模式(转载)
  7. Codeforces Round #422 (Div. 2)D. My pretty girl Noora(递推+数论)
  8. hdoj3665【简单DFS】
  9. qq教xixi写模拟加法【非常爆炸】
  10. 【Tip】Python