GCD 的初步认识

1.什么是 GCD?

  • GCD为Grand Central Dispatch的缩写

  • (GCD)是Apple开发的一个多核编程的较新的解决方法。它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。它是一个在线程池模式的基础上执行的并行任务。在Mac OS X 10.6雪豹中首次推出,也可在IOS 4及以上版本使用。

2.GCD 能做什么?

  • 2.1.GCD是一个替代诸如NSThread等技术的很高效和强大的技术。

  • 2.2.GCD完全可以处理诸如数据锁定和资源泄漏等复杂的异步编程问题。

  • 2.3.GCD的工作原理是让一个程序,根据可用的处理资源,安排他们在任何可用的处理器核心上平行排队执行特定的任务。这个任务可以是一个功能或者一个程序段。

  • 2.4.GCD仍然在一个很低的水平使用线程,但是它不需要程序员关注太多的细节。

  • 2.5.GCD创建的队列是轻量级的,苹果声明一个GCD的工作单元需要由15个指令组成。也就是说创造一个传统的线程很容易的就会需要几百条指令。

  • 2.6.GCD中的一个任务可被用于创造一个被放置于队列的工作项目或者事件源。如果一个任务被分配到一个事件源,那么一个由功能或者程序块组成的工作单元会被放置于一个适当的队列中。苹果公司认为GCD相比于普通的一个接一个的执行任务的方式更为有效率。

3.GCD 的好处是什么?

  • 3.1.在使用 GCD 进行多线程开发时,不需要手动开线程, GCD 会自动执行.

  • 3.2.能够减轻程序人员的工作量和复杂代码操作量.

  • 3.3.可以轻松实现队列调度,线程调度.


1.队列和任务

  • 1> 任务:需要执行什么操作

  • 用 block 来封装任务

  • 2> 队列:存放任务

  • 全局的并发队列:可以让任务并发执行

 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
  • 自己创建的串行队列:让任务一个接着一个执行
dispatch_queue_t queue = dispatch_queue_create("cn.sleeping", nil);
  • 主队列:让任务在主线程执行
 dispatch_queue_t queue = dispatch_get_main_queue();

2.执行任务的函数

  • 1> 同步执行:不具备开启线程的能力
    dispatch_sync...

  • 2> 异步执行:具备开启线程的能力
    dispatch_async...

3.常见组合

  • 1> dispatch_async + 全局并发队列
  • 2> dispatch_async + 自己穿件的串行队列

4.线程间通信

  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        // 执行耗时的异步操作
        dispatch_async(dispatch_get_main_queue(), ^{
         // 回到主线程,执行 UI 刷新操作
     });
 });

5.为什么可以直接使用 GCD?

  • GCD的所有 API 都在 ibdispatch.dylib,Xcode 会自动导入这个库

  • 主头文件: #import <dispatch/dispatch.h>

原文地址:https://www.cnblogs.com/sleepingSun/p/5120728.html