下面主要说一下线程任务执行的顺序
一、全局并发队列的执行顺序
<span style="font-size:18px;">#define DISPATCH_QUEUE_PRIORITY_HIGH 2 高
#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0 中
#define DISPATCH_QUEUE_PRIORITY_LOW (-2)<span style="white-space:pre"> </span>低
#define DISPATCH_QUEUE_PRIORITY_BACKGROUND 最低</span>
测试代码
<span style="font-size:14px;">- (void)thread_gcd_first{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"DISPATCH_QUEUE_PRIORITY_DEFAULT--2");
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
NSLog(@"DISPATCH_QUEUE_PRIORITY_HIGH--1");
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
NSLog(@"DISPATCH_QUEUE_PRIORITY_LOW--3");
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
NSLog(@"DISPATCH_QUEUE_PRIORITY_BACKGROUND--4");
});
}</span>
二、串行子队列的执行顺序
创建串行队列并放到全局队列中去,队列中的任务按照先进先出(FIFO)的顺序执行,实际上为单线程执行。
测试代码(关键词:DISPATCH_QUEUE_SERIAL)
<span style="font-size:14px;">- (void)thread_gcd_second{
//创建串行队列 --- DISPATCH_QUEUE_SERIAL
dispatch_queue_t serialQueue = dispatch_queue_create("fuzongjian", DISPATCH_QUEUE_SERIAL);
//将队列放到全局队列中,
dispatch_set_target_queue(serialQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0));
dispatch_async(serialQueue, ^{
NSLog(@"fu--2 ---%@",[NSThread currentThread]);
});
dispatch_async(serialQueue, ^{
NSLog(@"zong--2 ---%@",[NSThread currentThread]);
});
}</span>
输出结果如下,两次输出的number都等于2,也就说明了该操作是单线程执行,(非主线程哦)
三、并行子队列的执行顺序
与串行子队列恰恰相反,
测试代码(关键词:DISPATCH_QUEUE_CONCURRENT)
<span style="font-size:14px;">- (void)thread_gcd_third{
//创建串行队列 --- DISPATCH_QUEUE_CONCURRENT
dispatch_queue_t serialQueue = dispatch_queue_create("fuzongjian", DISPATCH_QUEUE_CONCURRENT);
//将队列放到全局队列中,
dispatch_set_target_queue(serialQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0));
dispatch_async(serialQueue, ^{
NSLog(@"fu--2");
});
dispatch_async(serialQueue, ^{
NSLog(@"zong--2");
});
}</span>
输出结果如下,可以看出两次输出的number不一样,即多线程执行。