多线程

来源:互联网 发布:开放源代码的软件 编辑:程序博客网 时间:2024/05/16 09:47

1.简介

1.1 GCD官方解释

Grand Central Dispatch(GCD)是异步执行任务的技术之一,一般将应用程序中记述的线程管理用的代码再系统级中实现。开发者只需要定义想执行的任务并追加到适当的 Dispatch Queue 中,GCD就能生成必要的线程并计划执行任务。由于线程管理是作为系统的一部分来实现的,因此可以统一管理,也可执行任务,这样就比以前的线程更有效率。

1.2 GCD的好处

  • GCD可用于多核的并行运算
  • GCD会自动利用更多的CPU内核(比如双核、四核)
  • GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程)
  • 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码

2.任务和队列

学习GCD之前,我们要了解GCD中两个核心概念:任务和队列。

2.1 任务

任务:就是执行操作的意思,换句话说就是你在线程中执行的那段代码。在GCD中是放在block中的。执行任务有两种方式:同步执行异步执行。两者的主要区别是是否具备开启新线程的能力。

  • 同步执行:只能在当前线程中执行任务,不具备开启新线程的能力。
  • 异步执行:可以在新的线程中执行任务,具备开启新线程的能力。

2.2 队列

队列:这里的队列指任务队列,即用来存放任务的队列。队列是一种特殊的线性表,采用FIFO(先进先出)的原则,即新任务总是被插入到队列的末尾,而读取任务的时候总是从队列的头部开始读取。每读取一个任务,则从队列中释放一个任务。在GCD中有两种队列:串行队列并行队列

  • 并行队列:可以让多个任务并行(同时)执行(自动开启多个线程同时执行任务),并行功能只有在异步函数下才有效。
  • 串行队列:让任务一个接着一个的执行(一个任务执行完毕后,再执行下一个任务)

3.GCD的使用步骤

GCD的使用步骤其实很简单,只有两步。

1.创建一个队列(串行队列或并行队列)

2.将任务添加到队列中,然后系统就会根据任务类型执行任务(同步执行或异步执行)

3.1 队列的创建方法

可以使用 dispatch_queue_create 来创建对象,需要传入两个参数,第一个参数表示队列的唯一标识符,用于Debug,可为空;第二个参数用来识别是串行队列还是并行队列。DISPATCH_QUEUE_SERIAL 表示串行队列,DISPATCH_QUEUE_CONCURRENT 表示并行队列。

1
2
3
4
// 串行队列的创建方法
dispatch_queue_t queue= dispatch_queue_create("test.queue", DISPATCH_QUEUE_SERIAL);
// 并行队列的创建方法
dispatch_queue_t queue= dispatch_queue_create("test.queue", DISPATCH_QUEUE_CONCURRENT);

 在下图中,我们可以看到,唯一标识符的作用,在Debug时,更容易确定是哪个线程除了问题。

对于并行队列,还可以使用 dispatch_get_global_queue 来创建全局并行队列。GCD默认提供了全局的并行队列,需要传入两个参数。第一个参数表示队列优先级,一般用DISPATCH_QUEUE_PRIORITY_DEFAULT,第二个参数暂时没用,用0即可。

原创粉丝点击