GCD 的原理和API应用

什么是GCD:

Grand Central Dispatch 是异步执行任务的技术之一。一般将应用程序中记述的线程管理用的代码 在系统级中实现。我们只需要把想要执行的代码添加到适当的Dispatch Queue中,GCD就能生成必要的线程并计划执行任务。由于线程管理是作为系统的一部分来是现实的,因此可以统一管理,也可执行任务。

在看下多线程:

我们写好代码,编译器编译为CPU命令(二进制代码),我们汇集这些CPU命令列和数据,将其作为一个app运行在Mac或iOS设备上。Mac OS(iOS)根据用户指示启动app后,首先将包含的CPU指令列配置到内存中去。然后从app指定的地址开始,一个个的执行命令,就这样的不断循环下去。由于CPU一次只执行一个命令(一个CPU核 执行的CPU命令列为一条五分叉的路径)。

当一个CPU核心执行多条“路径”上的不同命令,就为多线程。

举个例子:

执行中路径的状态,CPU的寄存器等信息保存到各自路径专用的内存块中,从切换目标路径专用的内存块中,复原CPU寄存器等信息,继续执行切换路径的CPU指令列,这被称为“上下文切换”

由于使用多线程的app可以在某个线程和其他线程之间反复多次进行上下文切换,因此看上去就好像一个CPU核 能够并列的执行多个线程一样。而在多核CPU中就是真的多核执行了。

多线程编程中会出现的问题:

多个线程更新相同的资源会导致数据的不一致(数据竞争)

停止等待事件的线程会导致多个线程相互持有等待(死锁)

使用太多线程会消耗大量的内存

线程的执行 在其内部有NSRunLoop的主循环执行。

优点:使用多线程编程,即使在执行长时间的任务的时候仍然可以保持用户界面的响应性能!!!

首先 Dispatch Queue按照追加的顺序(先入先出FIFO,First In First Out)执行处理。

dispatch_queue_t 是执行处理的等待队列,我们可以创建两种:

一种叫做Serial Dispatch Queue(串行队列)

执行1,等1结束执行2.

一种叫做Concurrent Dispatch Queue(并行队列)

执行1,不等1结束立刻执行2以此类推 (并行执行的任务数量由系统决定,即任务个数 CPU核心数,CPU负荷状态 决定)

iOS6以后不需要 dispatch_release()管理队列对象了。

你可能感兴趣的:(GCD 的原理和API应用)