GCD:
引自 [百度百科]
Grand Central Dispatch(GCD) 是 Apple 开发的一个多核编程的较新的解决方法。它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。它是一个在线程池模式的基础上执行的并发任务。在 Mac OS X 10.6 雪豹中首次推出,也可在 iOS 4 及以上版本使用。
GCD中几个关键名词:
- 什么是线程?
引自 [百度百科]
线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 - 什么是任务?
任务就是需要执行的操作,具体到程序中就是,你需要线程去执行的那段代码。
在GCD中,任务是以block的形式存在。 - 什么是队列?
队列就是任务被存放的地方。#队列#是一种特殊的线性表,采用 FIFO(先进先出)的原则;
GCD中的任务和队列的联系:
- 任务存放在队列中,如何去执行?
任务可采用两种方式来执行:
-
同步执行(sync):
同步添加任务到指定的队列中,在添加的任务执行结束之前,会一直等待,直到队列里面的任务完成之后再继续执行。
只能在当前线程中执行任务,不具备开启新线程的能力。 -
异步执行(async):
异步添加任务到指定的队列中,它不会做任何等待,可以继续执行任务。
可以在新的线程中执行任务,具备开启新线程的能力。
- 串行队列 和 并发队列 的概念,两者之间有什么区别?
-
串行队列(Serial Dispatch Queue):
每次只有一个任务被执行。让任务一个接着一个地执行。(只开启一个线程,一个任务执行完毕后,再执行下一个任务) -
并发队列(Concurrent Dispatch Queue):
可以让多个任务并发(同时)执行。(可以开启多个线程,并且同时执行任务)
并发队列的并发功能只有在异步(dispatch_async)方法下才有效。
GCD的使用
理解了以上关于GCD中几个关键名词,以及任务和队列之间的联系。GCD使用起来就很简单了。
通俗的做法有两步:
- 创建一个队列;
- 将任务追加入到队列中。