天天看点

iphone:Grand Central Dispatch

queue有三种 

Main: tasks execute serially on your application’s main thread

Concurrent: tasks start executing in FIFO order, but can run concurrently.

Serial: tasks execute one at a time in FIFO order

(1)serial queues(串行队列)又称私有调度队列(private),一般用再对特定资源的同步访问上。我们可以根据需要创建任意数量的串行队列,每一个串行队列之间是并发的。

(2)并行队列,又称global dispatch queue。并行队列虽然可以并发的执行多个任务,但是任务开始执行的顺序和其加入队列的顺序相同。我们自己不能去创建并行调度队列。只有三个可用的global concurrent queues。

(3)main dispatch queue 是一个全局可用的串行队列,其在行用程序的主线程上执行任务。此队列的任务和应用程序的主循环(run loop)要执行的事件源交替执行。因为其运行在应用程序的主线程,main queue经常用来作为应用程序的一个同步点

Important functions in this C API

Creating and releasing queues

dispatch_queue_t dispatch_queue_create(const char *label, NULL); // serial queue void dispatch_release(dispatch_queue_t);

Putting blocks in the queue

typedef void (^dispatch_block_t)(void);

void dispatch_async(dispatch_queue_t queue, dispatch_block_t block);

Getting the current or main queue

dispatch_queue_t dispatch_get_current_queue();

void dispatch_queue_retain(dispatch_queue_t); // keep it in the heap until dispatch_release

Main Queue:         dispatch_queue_t  dispatch_get_main_queue();

Global Queue:      dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

Serial:                 dispatch_queue_create("identifier",NULL);

Example ... assume we fetched an image from the network (this would be slow).

 本文转自老Zhan博客园博客,原文链接:http://www.cnblogs.com/mybkn/archive/2012/05/06/2486152.html,如需转载请自行联系原作者

继续阅读