• iOS开发之四张图说明GCD(Grand Central Dispatch)附Test源码


    首先,先介绍几个概念: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

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

  • 相关阅读:
    委托学习小记(1)
    C# 对XML的 创建、查询
    C#多线程学习(六) 互斥对象
    C#多线程学习(二) 如何操纵一个线程
    C#多线程学习(四) 多线程的自动管理(线程池)
    16/11/22_plsql
    写日志
    内存检测
    开源
    vs2005 远程调试。
  • 原文地址:https://www.cnblogs.com/iyou/p/3683950.html
Copyright © 2020-2023  润新知