首页 > 代码库 > Dispatch Queues

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


          

    

              

本文出自 “苹果开发” 博客,请务必保留此出处http://4223840.blog.51cto.com/4213840/1593530

Dispatch Queues