zoukankan      html  css  js  c++  java
  • 刀哥多线程GCD核心概念gcd

    GCD

    GCD 核心概念

    1. 任务添加到队列,并且指定执行任务的函数
    2. 任务使用 block 封装
      • 任务的 block 没有参数也没有返回值
    3. 执行任务的函数
      • 异步 dispatch_async
        • 不用等待当前语句执行完毕,就可以执行下一条语句
        • 会开启线程执行 block 的任务
        • 异步是多线程的代名词
      • 同步 dispatch_sync
        • 必须等待当前语句执行完毕,才会执行下一条语句
        • 不会开启线程
        • 在当前执行 block 的任务
    4. 队列 - 负责调度任务
      • 串行队列
        • 一次只能”调度”一个任务
        • 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条,再多会费电费钱!
  • 相关阅读:
    JavaScript Patterns 5.7 Object Constants
    JavaScript Patterns 5.6 Static Members
    JavaScript Patterns 5.5 Sandbox Pattern
    JavaScript Patterns 5.4 Module Pattern
    JavaScript Patterns 5.3 Private Properties and Methods
    JavaScript Patterns 5.2 Declaring Dependencies
    JavaScript Patterns 5.1 Namespace Pattern
    JavaScript Patterns 4.10 Curry
    【Android】如何快速构建Android Demo
    【Android】如何实现ButterKnife
  • 原文地址:https://www.cnblogs.com/jiahao89/p/5118279.html
Copyright © 2011-2022 走看看