GCD笔记-dispatch_set_target_queue之变更派发队列的优先级

dispatch_queue_create函数生成的派发队列不管是

Serial Dispatch queue

还是Concurrent Dispatch Queue

都使用与默认优先级Global Dispatch Queue

相同执行优先级的线程。

我们可以通过dispatch_set_target_queue函数变更生成的派发队列的优先级,代码如下:

#define TEST_QUEUE @"com.test.queue0"
#define TEST_QUEUE1 @"com.test.queue1"
#define TEST_QUEUE2 @"com.test.queue2"
#define TEST_QUEUE3 @"com.test.queue3"
#define TEST_QUEUE4 @"com.test.queue4"
#define C_QUEUE @"come.test.c.queue"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    dispatch_queue_t testQueue=dispatch_queue_create(TEST_QUEUE,NULL);
    dispatch_queue_t testQueue1=dispatch_queue_create(TEST_QUEUE1,NULL);
    dispatch_queue_t testQueue2=dispatch_queue_create(TEST_QUEUE2,NULL);
    dispatch_queue_t testQueue3=dispatch_queue_create(TEST_QUEUE3,NULL);
    dispatch_queue_t testQueue4=dispatch_queue_create(C_QUEUE,      DISPATCH_QUEUE_CONCURRENT);
    //[self testQueueC:testQueue4];
    
    
    dispatch_set_target_queue(testQueue1, testQueue);
    dispatch_set_target_queue(testQueue2, testQueue);
    dispatch_set_target_queue(testQueue3, testQueue);
    dispatch_set_target_queue(testQueue4, testQueue);
    
    [self testQueue0:testQueue];
    [self testQueue1:testQueue1];
    [self testQueue2:testQueue2];
    [self testQueue3:testQueue3];
    
    
    
    
    
    
     
     
    
}

dispatch_set_target_queue 的第一个参数是 指定要变更执行优先级的派发队列(被改变优先级的队列

dispatch_set_target_queue 的第二个参数是 要使用的执行优先级相同优先级的队列(目标优先级的队列,即参照的对象

注意:

如果在多个Serial dispatch queue中用dispatch_set_target_queue函数指定目标为某一个Serial dispatch queue,那么原来本该并行执行的多个Serial dispatch queue,在目标 派发队列上只能同时执行一个处理。

因此,在必须将不可并行执行的处理追加到多个Serial dispatch queue中时,可以使用dispatch_set_target_queue函数将目标指定为某一个Serial dispatch queue,即可防止并行执行。

执行顺序,最最最原始的,肯定是讲究先来后到的,先来先服务

这种改变优先级的,把Serial dispatch queue 银行窗口前的队伍,多个窗口,多个队伍,每个队伍是并行的,但是每个队伍中的每个办理业务的人的任务执行顺序,还是先来先服务的操作

如果所有的队伍都要求同某个队伍保持相同的优先级,那只能恢复队伍层面的先来先服务了,只能把这些完全变成串行

我们看一下代码:

#define MAX_NUMBER 10000
#define TEST_QUEUE @"com.test.queue0"
#define TEST_QUEUE1 @"com.test.queue1"
#define TEST_QUEUE2 @"com.test.queue2"
#define TEST_QUEUE3 @"com.test.queue3"
#define TEST_QUEUE4 @"com.test.queue4"
#define C_QUEUE @"come.test.c.queue"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    dispatch_queue_t testQueue=dispatch_queue_create(TEST_QUEUE,NULL);
    dispatch_queue_t testQueue1=dispatch_queue_create(TEST_QUEUE1,NULL);
    dispatch_queue_t testQueue2=dispatch_queue_create(TEST_QUEUE2,NULL);
    dispatch_queue_t testQueue3=dispatch_queue_create(TEST_QUEUE3,NULL);
    dispatch_queue_t testQueue4=dispatch_queue_create(C_QUEUE, DISPATCH_QUEUE_CONCURRENT);
    //[self testQueueC:testQueue4];
    
    
    dispatch_set_target_queue(testQueue1, testQueue);
    dispatch_set_target_queue(testQueue2, testQueue);
    dispatch_set_target_queue(testQueue3, testQueue);
    dispatch_set_target_queue(testQueue4, testQueue);
    
    [self testQueue0:testQueue];
    [self testQueue1:testQueue1];
    [self testQueue2:testQueue2];
    [self testQueue3:testQueue3];
    
    
    
    
    
    
     
     
    
}
-(void)testQueueC:(dispatch_queue_t)testQueue{
   dispatch_async(testQueue, ^(){
        NSLog(@"细");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"草");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"微");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"风");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"岸");
    });

}
-(void)testQueue0:(dispatch_queue_t)testQueue{
   dispatch_async(testQueue, ^(){
        NSLog(@"0");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"1");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"2");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"3");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"4");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"5");
    });
}
-(void)testQueue1:(dispatch_queue_t)testQueue{
   dispatch_async(testQueue, ^(){
        NSLog(@"a");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"b");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"c");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"d");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"e");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"f");
    });
}
-(void)testQueue2:(dispatch_queue_t)testQueue{
   dispatch_async(testQueue, ^(){
        NSLog(@"A");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"B");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"C");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"D");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"E");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"F");
    });
}
-(void)testQueue3:(dispatch_queue_t)testQueue{
   dispatch_async(testQueue, ^(){
        NSLog(@"海");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"内");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"存");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"知");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"己");
    });
    dispatch_async(testQueue, ^(){
        NSLog(@"啊");
    });
}

我们看一下执行结果:

020-08-23 00:11:51.150919+0800 gcd0[17626:712034] 0
2020-08-23 00:11:51.151061+0800 gcd0[17626:712034] 1
2020-08-23 00:11:51.151203+0800 gcd0[17626:712034] 2
2020-08-23 00:11:51.151342+0800 gcd0[17626:712034] 3
2020-08-23 00:11:51.151502+0800 gcd0[17626:712034] 4
2020-08-23 00:11:51.151622+0800 gcd0[17626:712034] 5
2020-08-23 00:11:51.151756+0800 gcd0[17626:712034] a
2020-08-23 00:11:51.151883+0800 gcd0[17626:712034] b
2020-08-23 00:11:51.151992+0800 gcd0[17626:712034] c
2020-08-23 00:11:51.152106+0800 gcd0[17626:712034] d
2020-08-23 00:11:51.152400+0800 gcd0[17626:712034] e
2020-08-23 00:11:51.152828+0800 gcd0[17626:712034] f
2020-08-23 00:11:51.153216+0800 gcd0[17626:712034] A
2020-08-23 00:11:51.153570+0800 gcd0[17626:712034] B
2020-08-23 00:11:51.154188+0800 gcd0[17626:712034] C
2020-08-23 00:11:51.154834+0800 gcd0[17626:712034] D
2020-08-23 00:11:51.155336+0800 gcd0[17626:712034] E
2020-08-23 00:11:51.155711+0800 gcd0[17626:712034] F
2020-08-23 00:11:51.156198+0800 gcd0[17626:712034] 海
2020-08-23 00:11:51.156767+0800 gcd0[17626:712034] 内
2020-08-23 00:11:51.157366+0800 gcd0[17626:712034] 存
2020-08-23 00:11:51.157736+0800 gcd0[17626:712034] 知
2020-08-23 00:11:51.158654+0800 gcd0[17626:712034] 己
2020-08-23 00:11:51.158932+0800 gcd0[17626:712034] 啊

即使执行多次,顺序也不会改变,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值