1、首先认识清楚,多线程分为:并行和串行,,并行和串行又可以包括同步线程和异步线程。GCD仅仅支持FIFO(先入先出)队列
2、不管是并行还是串行,只要是同步线程,都是按顺序执行;
3、技术几个名词:线程阻塞(dispatch_barrier_async)、线程等待(dispatch_after)、线程死锁,在全局并发队列中,可以设置优先级
4、在认识多线程特点:我们平时用时需要先建立多线程对象,然后在添加任务(同步、异步 执行),,,有时候我们有多个线程,一般用线程组来管理(在线程组里的线程都完成时,或触发全部完成方法(dispatch_group_notify))。
5、死锁的4个必要条件:互斥、请求保持、不可剥夺、环路(主要是资源竞争及进程推进顺序非法)
补充关系:
①:先搞清两者的关系,NSOpertaionQueue用GCD构建封装的,是GCD的高级抽象!
②:GCD仅仅支持FIFO(先入先出)队列,而NSOperationQueue中的队列可以被重新设置优先级,从而实现不同操作的执行顺序调整。GCD不支持异步操作之间的依赖关系设置。如果某个操作的依赖另一个操作的数据(生产者-消费者模型是其中之一),使用NSOperationQueue能够按照正确的顺序执行操作。GCD则没有内建的依赖关系支持。
③:NSOperationQueue支持KVO,意味着我们可以观察任务的执行状态。
性能:
①:GCD更接近底层,而NSOperationQueue则更高级抽象,所以GCD在追求性能的底层操作来说,是速度最快的。
③:如果异步操作的过程需要更多的被交互和UI呈现出来,NSOperationQueue会是一个更好的选择。底层代码中,任务之间不太互相依赖,而需要更高的并发能力,GCD则更有优势