·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> app软件开发 >> IOS开发 >> iOS开发之四张图说明GCD(GrandCentralDispatch)附Test源码

iOS开发之四张图说明GCD(GrandCentralDispatch)附Test源码

作者:佚名      IOS开发编辑:admin      更新时间:2022-07-23

首先,先介绍几个概念:GCD,队列,串行,并行,同步,异步。                                                                       

GCD(Grand Central Dispatch):

伟大的苹果公司开发的一种多核多线程的解决方案。

    • 是基于C语言的底层API
    • 用Block定义任务,使用起来非常灵活便捷
    • 提供了更多的控制能力以及操作队列中所不能使用的底层函数

GCD的基本思想就是就将操作s放在队列s中去执行

  • 操作使用Blocks定义
  • 队列负责调度任务执行所在的线程以及具体的执行时间
  • 队列的特点是先进先出(FIFO)的,新添加至对列的操作都会排在队尾
  • GCD的函数都是以dispatch(分派、调度)开头的

队列(FIFO):

队列是一种先进先出的组织方式,我看到最搞笑也很形象的解释是:(队列和栈的区别:吃多了拉是队列,吃多了吐是栈)。

  • 串行队列,队列中的任务只会顺序执行
  • 并行队列,队列中的任务通常会并发执行

串行和并行的概念若还是不清楚的,我再举个例子:有10个人在超市买完东西同时到一个收银点排队依次结帐走人,前一个结帐操作不完成,后一个就得等着。这就是典型的串行。10个人去不同的10个收银点同时结帐,谁先结完帐谁就先走。这就是并行。还是不明白的话请看下面例子。

同步和异步(更具体的请看百科)

  • 异步操作(dispatch_async) ,会并发执行,无法确定任务的执行顺序
  • 同步操作(dispatch_sync),会依次顺序执行,能够决定任务的执行顺序

请看下面四幅图片:                                                                                            

1

 

 

 

2

 

 

 

 

 

3

 

 

4

 

 

 

请注意:在并行队列中,异步任务的位置是没有意义的,即不管不放在什么位置,都会并发的去执行!

测试源码链接:http://pan.baidu.com/s/1bnCd8HT

以上纯属个人理解,水平有限,若有错误欢迎来喷!