GCD是什么
按照官方文档的解释,针对在多核系统上运行并发执行程序,提供了系统性的支持。支持包含语言中的方法,以及运行时库。可以应用在macOS、iOS、watchOS、tvOS上
Dispatch, also known as Grand Central Dispatch (GCD), contains language features, runtime libraries, and system enhancements that provide systemic, comprehensive improvements to the support for concurrent code execution on multicore hardware in macOS, iOS, watchOS, and tvOS.
为什么需要使用GCD
- 为了提升程序对资源(多核CPU)的利用效率, 这样你的程序可以在同一时间运行多个线程(在多核CPU上),会让你的应用更快
- 可以提升你的程序的响应能力。在iOS上,用户操作以及UI线程的操作是放在主线程的,此时如果存在其他的任务,你可以将这些任务放在子线程,避免堆主线程时间的占用,这样间接提升了主线程的响应能力。
- GCD系统会自动根据程序的需要,系统硬件的能力,控制任务在线程上的调度,平衡多任务的执行
- 此外,从个人的理解上,GCD封装了系统上对thread的使用接口,更方便使用;同时,增加了任务调度的能力,避免上层在使用多任务时调度多任务的负担
GCD有哪些概念
Queues and Tasks
- DispatchQueue,GCD队列, 一个先进先出的队列,用来接收用户提交的Task,并放在合适的线程中执行
- DispatchWorkItem, 用户任务的封装
- DispatchGroup, 用户任务组, 封装一组任务
- Workloop, 任务优先级调度
Thread Scheduling
5. DispatchQoS,任务优先级
System Event Monitoring
- DispatchSource, GCD事件源, 封装底层系统的事件
- DispatchIO,文件IO相关的对象
- DispatchData, 内存封装对象
Task Synchronization(任务同步)
- DispatchSemaphore, 基于信号封装的GCD多任务之间的信号量
Time Constructs 时间相关对象
- DispatchTime
- DispatchWallTime
- DispatchTimeInterval
- DispatchTimeoutResult