Grand Central Dispatch(GCD) 是 Apple 开发的一个多核编程的较新的解决方法。它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。它是一个在线程池模式的基础上执行的并发任务。在 Mac OS X 10.6 雪豹中首次推出,也可在 iOS 4 及以上版本使用。GCD详细介绍参考:GCD详解
关于GCD的三种不同的线程队列理解分析:
一.dispatch_get_main_queue
主队列,也是串行队列,所有被添加到主队列中的线程都是主线程。
//MARK:主线程
- (void)doSomeThingsOnMainThread
{
dispatch_queue_t main_queue = dispatch_get_main_queue();
dispatch_async(main_queue, ^{
NSLog(@"1:%@",[NSThread currentThread]);
});
dispatch_async(main_queue, ^{
NSLog(@"2:%@",[NSThread currentThread]);
});
dispatch_async(main_queue, ^{
NSLog(@"3:%@",[NSThread currentThread]);
});
dispatch_async(main_queue, ^{
NSLog(@"4:%@",[NSThread currentThread]);
});
dispatch_sync(main_queue, ^{
NSLog(@"5:%@",[NSThread currentThread]);
});
/*
2018-05-04 15:46:19.627674+0800 GCD几种线程理解[7802:451301] 1:<NSThread: 0x600000067340>{number = 1, name = main}
2018-05-04 15:46:19.627831+0800 GCD几种线程理解[7802:451301] 2:<NSThread: 0x600000067340>{number = 1, name = main}
2018-05-04 15:46:19.627977+0800 GCD几种线程理解[7802:451301] 3:<NSThread: 0x600000067340>{number = 1, name = main}
2018-05-04 15:46:19.628090+0800 GCD几种线程理解[7802:451301] 4:<NSThread: 0x600000067340>{number = 1, name = main}
*/
/*
1.从这里我们可以看出主线程队列也是个串行队列,所有被添加到主线程队列上的线程都是主线程,遵循先进先出规则,即FIFO.
2.在主线程队列中使用同步线程会导致主线程锁死.
3.被分配的线程都是同一个主线程.
*/
}
二.全局队列 dispatch_get_global_queue
//MARK:全局队列
- (void)doSomeThingsOnGlobalQueue
{
/*
#define DISPATCH_QUEUE_PRIORITY_HIGH 2
#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0 默认
#define DISPATCH_QUEUE_PRIORITY_LOW (-2)
#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN
*/
dispatch_queue_t global_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(global_queue, ^{
NSLog(@"1:%@",[NSThread currentThread]);
});
dispatch_async(global_queue, ^{
NSLog(@"2:%@",[NSThread currentThread]);
});
dispatch_async(global_queue, ^{
NSLog(@&#