Dispatch Queues

GCD(Grand Central Dispatch)的 dispatch queues 是一个实现多任务的很好的工具。Dispatch queues 让你能够方便的使用blocks,不管你想要去调用同步或异步。你可以实现几乎所有的以前你通过separate 的threads完成的任务。相对thread的code 而言,dispatch queues的优点是更简单和更有效率。

这章节提供了dispatch queues的详细介绍,所有关于怎么样使用他们去执行普通任务的信息。

一、关于Dispatch Queues

   Dispatch Queues 是一个简单实现实现异步和并发任务的方法。A dispatch queue is an object-like structures that manages the tasks you submit to it.所有的dispatch queue都是先进先出的数据结构

Serial queues:每次只执行一个任务,并且先进先出。如果想通过这个实现并发可以创建多个serial queue 。但是如果希望实现许多并发则建议使用并发queues。

dispatch_queue_t queue;

queue =  dispatch_queue_create("com.example.MyQueue",NULL);

Concurrent  Queue :(global dispatch queue) 并发,但是仍然按加进队列的顺序启动。并发执行的任务在确定的线程中(被并发队列管理着的)。具体的执行的线程数由系统决定,是动态的。In IOS5 and later ,我们能够自己创建并发队列通过设定为DISPATCH_QUEUE_CONCURRENT 的类型

系统提供了4个并发队列 是全局的,他们只是优先等级不同。因为是全局的,我们不在需要创建了。通过dispatch_get_global_queue

dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)

DISPATCH_QUEUE_PRIORITY_HIGH 和DISPATCH_QUEUE_PRIORITY_LOW ,DISPATCH_QUEUE_PRIORITY_BACKGROUND

note:第二个参数以后在解释,现在我们只要传0得参数就行了。

Main dispatch queue :主队列是一个全局可获取在应用主线程中执行任务的的窜行队列。 通过run loop 将我们要执行的任务加进主线程。如果不是cocoa的应用,也不想特别的创建run loop ,你必须通过dispatch_main方法

dispatch_get_main_queue.

二,获取运动时的队列

你可以通过dispatch_get_current_queue获取运行时的队列:

1.

dispatch_queue_t currentQueue = dispatch_get_current_queue();

如果在队列执行任务中调用,返回执行此任务的队列;如果在主线程中调用,将返回主队列;如果在一般线程(非主线程线程非队列执行任务)中调用,返回DISPATCH_QUEUE_PRIORITY_DEFAULT全局队列。

三、在队列中运行任务

异步

dispatch_async(aQueue,^{

//do somethings

});

同步

dispatch_sync(aQueue,^{

});

四、Dispatch Queue的内存管理

除了系统定义的Dispatch Queue,我们自定义的Dispatch Queue需要手动的管理它的内存。

dispatch_retain dispatch_release

时间: 2024-10-24 18:25:45

Dispatch Queues的相关文章

详解IOS开发应用之并发Dispatch Queues (2011)

详解IOS开发应用之并发Dispatch Queues是本文哟啊介绍的内容,我们几乎可以调度队列去完成所有用线程来完成的任务.调度队列相对于线程代码更简单,易于使用,更高效.下面讲主要简述调度队列,在应用中如何使用调度队列去执行任务. 1.关于调度队列 所有的调度队列都是先进先出队列,因此,队列中的任务的开始的顺序和添加到队列中的顺序相同.GCD自动的为我们提供了一些调度队列,我们也可以创建新的用于具体的目的. 下面列出几种可用的调度队列类型以及如何使用. (1)serial queues(串行

dispatch queues GCD

我们几乎可以调度队列去完成所有用线程来完成的任务.调度队列相对于线程代码更简单,易于使用,更高效. 下面讲主要简述调度队列,在应用中如何使用调度队列去执行任务. 1.关于调度队列 所有的调度队列都是先进先出队列,因此,队列中的任务的开始的顺序和添加到队列中的顺序相同.GCD自动的为我们提供了一些调度队列,我们也可以创建新的用于具体的目的. 下面列出几种可用的调度队列类型以及如何使用. (1)serial queues(串行队列)又称私有调度队列(private),一般用在对特定资源的同步访问上.

Dispatch Queues调度队列

前言-死锁案例 // 在主线程中执行 dispatch_queue_t queueMain = dispatch_get_main_queue(); dispatch_sync(queueMain, ^{ NSLog(@"+++++++"); }); NSLog(@"hahahaha"); 案例分析:运行结果是程序阻塞在dispatch_sync()处.由于main线程执行到dispatch_sync()处,线程处于等待状态.将block任务块添加到主串行队列最后,

转----详解IOS开发应用之并发Dispatch Queues

详解IOS开发应用之并发Dispatch Queues是本文要介绍的内容,我们几乎可以调度队列去完成所有用线程来完成的任务.调度队列相对于线程代码更简单,易于使用,更高效.下面讲主要简述调度队列,在应用中如何使用调度队列去执行任务. 1.关于调度队列 所有的调度队列都是先进先出队列,因此,队列中的任务的开始的顺序和添加到队列中的顺序相同.GCD自动的为我们提供了一些调度队列,我们也可以创建新的用于具体的目的. 下面列出几种可用的调度队列类型以及如何使用. (1)serial queues(串行队

iOS 并行编程:GCD Dispatch Queues

1 简介 1.1 功能       Grand Central Dispatch(GCD)技术让任务并行排队执行,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务.任务可以是一个函数(function)或者是一个block. GCD的底层依然是用线程实现,不过这样可以让程序员不用关注实现的细节. GCD中的队列称为dispatch queue,它可以保证先进来的任务先得到执行通过它能够大大简化多线程编程.工程师只要将要执行的任务(执行代码块)放入队列中,GCD将会为需要执行的任务创建

iOS多线程系列(三)----Dispatch Queues

转载自:http://blog.sina.com.cn/s/blog_6dce99b10101atsu.html,尊重原创! 详解IOS开发应用之并发Dispatch Queues是本文要介绍的内容,我们几乎可以调度队列去完成所有用线程来完成的任务.调度队列相对于线程代码更简单,易于使用,更高效.下面讲主要简述调度队列,在应用中如何使用调度队列去执行任务. 1.关于调度队列 所有的调度队列都是先进先出队列,因此,队列中的任务的开始的顺序和添加到队列中的顺序相同.GCD自动的为我们提供了一些调度队

iOS多线程----Dispatch Queues

转载自:http://blog.sina.com.cn/s/blog_6dce99b10101atsu.html,尊重原创! 详解IOS开发应用之并发Dispatch Queues是本文要介绍的内容,我们几乎可以调度队列去完成所有用线程来完成的任务.调度队列相对于线程代码更简单,易于使用,更高效.下面讲主要简述调度队列,在应用中如何使用调度队列去执行任务. 1.关于调度队列 所有的调度队列都是先进先出队列,因此,队列中的任务的开始的顺序和添加到队列中的顺序相同.GCD自动的为我们提供了一些调度队

GCD介绍(一):基本概念和Dispatch Queues

什么是GCD? Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写.从基本功能上讲,GCD有点像NSOperationQueue,他们都允许程序将任务切分为多个单一任务然后提交至工作队列来并发地或者串行地执行.GCD比之NSOpertionQueue更底层更高效,并且它不是Cocoa框架的一部分. 除了代码的平行执行能力,GCD还提供高度集成的事件控制系统.可以设置句柄来响应文件描述符.mach ports(Mach port 用于 O

Dispatch Queues 线程池

Dispatch Queues Dispatch queues are a C-based mechanism for executing custom tasks. A dispatch queue executes tasks either serially or concurrently but always in a first-in, first-out order. (In other words, a dispatch queue always dequeues and start