gcd是苹果推出的多线程处理技术。
什么是线程呢,线程是cpu执行的汇编指令集合,由于一个cpu一次只能执行一个命令,不能在某处分开并行2个命令,因此通过cpu执行的cpu命令列就好比一条没有分叉的路。
现在的物理cpu芯片实际上有64个(64核)cpu,如果一个cpu核虚拟成2个cpu工作,那么pc上使用多个cpu核是很常见的。
osx和ios核心xnu内核在发生系统操作事件时会切换执行路径。执行路径的状态(例如cpu寄存器等信息保存到各自路径专用的内存快中,从切换目标路径专用的内存块中,复原cpu寄存器等信息,继续执行切换路径的cpu命令列,这被称为“上下文切换”。)
正是这么的反复多次在上下文中切换就看上去是一个cpu在执行多个线程一样,对于多核cpu是真正的在执行多个线程,而不是看上去像。
1.Dispatch Queue 队列(fifo)分为Serial Diapatch Queue (单)和 Concurrent Dispatch Queue(多)
2.dispatch_queue_creat 通过gcd的api生成的使用到creat的所以API都要 记得释放。dispatch_release,
对main和globel进行release和retain不起作用。所以使用它们2个时不用release。线程分为4个等级。但是没什么用。
3.dispatch_set_target_queue设置其等级。该等级还可以作为Dispatch Queue的执行阶层。
4.dispatch_after 等待多久后追加block到queue中。
5.dispatch_group 多个处理全部结束和想执行结果处理。用notify回调UI线程。
6.dispatch_barrier_async 栅栏,可避免数据竞争的问题。
7.dispatch_apply 多次执行某一个任务。
8.dispatch_suspend/resume 线程挂起和恢复。(ios10.1出现了dispatch_cancel)
9.dispatch_semaphore 数据竞争处理,比6中的栅栏颗粒度高。
10.dispatcch_once 百分百只执行一次
11.dispatchi/o 读取大文件时,将文件分成段读取。
12.dispatch source 系统内核发生各种事件时,在应用程序编程方执行处理的技术。(例如 文件的读取,定时器、接收信号等)
想详细了解去看看小日本写的那本《多线程与内存管理》哈。小日本的东西写的就是好,不服不行啊。