• IOS之GCD记录


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

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

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

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

    更新:

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

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

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

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

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

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

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

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

  • 相关阅读:
    Python的简单介绍/解释器/变量/变量的数据类型/用户交互及流程控制(if)
    变量
    hello python
    页面默认值显示
    java 获取时间区间
    java Set 中 removeAll 与 addAll
    命名的数据库实例
    linux 打包与解包
    缓存工作原理
    java 格式化日期(转)
  • 原文地址:https://www.cnblogs.com/wcLT/p/4699412.html
Copyright © 2020-2023  润新知