GCD与NSOperationQueue

1> GCD是纯C语言的API,NSOperationQueue是基于GCD的OC版本封装

2> GCD只支持FIFO(先入先出)的队列,NSOperationQueue可以很方便地调整执行顺序、设置最大并发数量

3> NSOperationQueue可以在轻松在Operation间设置依赖关系,而GCD需要写很多的代码才能实现

4> NSOperationQueue支持KVO,可以监测operation是否正在执行(isExecuted)、是否结束(isFinished),是否取消(isCanceld)

5> GCD的执行速度比NSOperationQueue快

任务之间不太互相依赖:GCD

任务之间有依赖\或者要监听任务的执行情况:NSOperationQueue

时间: 2024-12-20 22:20:43

GCD与NSOperationQueue的相关文章

IOS 多线程02-pthread 、 NSThread 、GCD 、NSOperationQueue、NSRunLoop

注:本人是翻译过来,并且加上本人的一点见解. 要点: 1.前言 2.pthread 3.NSThread 4.Grand Central Dispatch(GCD) 5.Opearation Queues 6. Run Loops 7. 多线程编程中面临的挑战 8. 资源共享 9. 互斥锁 10. 死锁 11. 资源饥饿(Starvation) 12. 优先级反转 1. 前言 其实把RunLoop叫做多线程不正确,因为它不能真正的并行,不过因为它与并发编程有莫大关系,所以值得我们深入了解. 2.

伟大的GCD和NSOperationQueue

一. GCD GCD中最重要的两个东西 任务 和 队列 任务就是一段代码(用来缓存,下载,计算等操作) 队列从大的方面分为两个队列:主队列(串行队列)和 自己创建的队列(串行,和并行) 主队列中: 在主队列中不能开启新的线程出来(所以同步和异步的效果是一样的,但是按钮会回弹上来,变成可以点击的样子,但是实际点击了也是无效的) 在主队列中,不能执行同步的方法,主线程的方法执行完,才会执行主线程方法里的主线程方法,这样就会两个任务互相等待! 而异步就可以把主任务暂时挂起,先执行完主线程的任务,然后在

gcd和NSOperationQueue区别

NSOpertaionQueue用GCD构建封装的,是GCD的高级抽象.GCD仅仅支持FIFO队列,而NSOperationQueue中的队列可以被重新设置优先级,从而实现不同操作的执行顺序调整.GCD不支持异步操作之间的依赖关系设置.如果某个操作的依赖另一个操作的数据(生产者-消费者模型是其中之一),使用NSOperationQueue能够按照正确的顺序执行操作.GCD则没有内建的依赖关系支持.NSOperationQueue支持KVO,意味着我们可以观察任务的执行状态. 了解以上不同,我们可

通过GCD、NSOperationQueue队列、NSThread三种方法来创建多线程

#import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UILabel *remindLabel; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view,

IOS中的多线程【二】— NSOperation和NSOperationQueue

NSOperationQueue是一套基于Objective-c语言的API. GCD与NSOperationQueue的优缺点: NSOperationQueue:比较安全 GCD:没有NSOperationQueue安全,但使用起来简单,快速,还提供了一些操控底层的方法.实际开发中还是以GCD为主. NSOperationQueue实现多线程流程 1.定义一个任务队列. 2.定义一个任务. 3.把任务添加到队列中.一旦任务被添加到队列中,任务会马上被调度执行. 任务队列(NSOperatio

gcd 控制线程执行顺序(供参考)

dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{ // 并行执行的线程一 }); dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{ // 并行执行的线程二 }); dispatch_group_notify(group, dispatch_get_

GCD内部实现

Dispatch Queue Dispatch Queue 对于我们开发者来说应该是非常熟悉了,运用的场景非常之多,但是他的内部是如何实现的呢? 用于管理追加的Block的C语言层实现的FIFO队列 Atomic函数中实现的用于排他控制的轻量级信号 用于管理线程的C语言层实现的一些容器 不难想象,GCD的实现需要使用以上这些工具,但是如果仅用这些内容便可实现,那么就不需要内核级实现了.(实际上在一般的Linux内核中可能使用面向Linux操作系统而移植的GCD). 甚至有人会想,只要努力编写线程

GCD 以及设计模式

多线程编程 在 iOS 编程中,这几种情况下需要处理多线程:UI 事件必须在主线程里进行,其他的可以放在后台进行:而进行一些耗时长或阻塞线程的任务,最后放进后台线程里进行.iOS 的多线程技术有这么几种:线程,GCD 和 NSOperationQueue.线程这种技术比较复杂,而多线程编程向来是「复杂必死」,推荐尽可能使用后二者,但线程有个后二者没有的优势:能够精确保证任务执行的时间.GCD 全称是 Grand Central Dispatch, 是 libdispatch 这个库的外部代号,基

iOS- dispatch_semaphore和NSOperationQueue并发

并发:同一个时间内运行多个任务.又叫共行性,是指处理多个同时性活动的能力. 并行:是指两个并发的任务同时发生. 并发不一定并行,并发不一定要同时发生. 举个例子: 有两个快递分别要送到目的地,有以下两种方案: (1)一个快递员分别把两个快递送到对应的目的地.(并发) (2)两个快递员同时送一个快递到目的地.(并行) 在iOS中,经常可以看见有这样的需求,就是一个方法要等另外一个方法执行完毕再做相对应的处理,比如说一些网络请求,需要根据上一个请求的返回值做相对应的处理再执行第二个请求,所以我们不能