每次运行一个任务,可以添加多个,执行次序FIFO(队列,先进先出first input first out). 通常是指程序员生成的,比如:
dispatch_queue_t myCustomQueue = dispatch_queue_create("example.MyCustomQueue", NULL);
dispatch_async(myCustomQueue, ^{
for (int abc=0;abc<100;abc++)
{
printf("1.Do some work here.\n");
}
});
dispatch_async(myCustomQueue, ^{
for (int abc=0;abc<100;abc++)
{
printf("2.Do some work here.\n");
}
});
dispatch_queue_t myCustomQueue2 = dispatch_queue_create("example.MyCustomQueue2", NULL);
dispatch_async(myCustomQueue2, ^{
for (int abc=0;abc<100;abc++)
{
printf("1. myCustomQueue2 Do some work here.\n");
}
});
dispatch_async(myCustomQueue2, ^{
for (int abc=0;abc<100;abc++)
{
printf("2. myCustomQueue2 Do some work here.\n");
}
});
打印的结果必定会是 :然而,因为myCustomQueue 和 myCustomQueue2 是在两个队列中,所以在队列myCustomQueue中:
“1.Do some work here.” 在 “2.Do some work here.” 之前,而在myCustomQueue2队列中:“1. myCustomQueue2
Do some work here.”在“2. myCustomQueue2 Do some work here.”之前。而在myCustomQueue和myCustomQueue2
之中的任务是没有先后的。及不是并发的。
3. Concurrent queue(global dispatch queue):
dispatch_queue_t newThread = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(newThread,^{[self
downloadImage:ImageURL];
});
小节:NSThread的方式或许能做更快的切换,因为ARMv6或更高版本的处理器都提供了非常强大的线程切换机制。但是NSThread不会
采取多核的分派,因为这个系统接口首先要保证的是用户线程的可靠性。 而Grand Central Dispatch显式地利用分派队列来做多核
分派调度,因此如果是在多核处理器上的话用G_C_D更快。如果你的处理器是单核心的话,那么可以使用切换更快的NSThread。
Where do I find GCD?
1. GCD is part of libSystem.dylib
2. #include <dispatch/dispatch.h>