美文网首页
iOS多线程-dispatch_set_target_queue

iOS多线程-dispatch_set_target_queue

作者: rainbowboy | 来源:发表于2018-08-28 11:19 被阅读13次

    祭出demo
    GCD里,我们通过dispatch_get_global_queue可以设置这个全局并发队列的优先级,但是通过dispatch_queue_create是无法设置队列的优先级的。怎么办呢?

    dispatch_set_target_queue(queue1, queue2)就可以把queue1的优先级修改为queue2的优先级,这样就解决了,自行创建的队列无法设置优先级的问题。
    看下示例:

    dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);
        dispatch_queue_t queue1 = dispatch_queue_create("queue1", DISPATCH_QUEUE_SERIAL);
        dispatch_queue_t queue2 = dispatch_queue_create("queue2", DISPATCH_QUEUE_SERIAL);
        dispatch_queue_t queue3 = dispatch_queue_create("queue3", DISPATCH_QUEUE_SERIAL);
        /*queue3是自行创建的,默认优先级是globalqueue的默认优先级即:PRIORITY_DEFAULT*/
        
        
        /*统一queue1和queue2的优先级到globalQueue*/
        dispatch_set_target_queue(queue1, globalQueue);
        dispatch_set_target_queue(queue2, globalQueue);
        
        dispatch_async(queue2, ^{
            NSInteger i = 0 ;
            while (i < 10) {
                I++;
                NSLog(@"task2:%ld queue:%@",i,NSThread.currentThread);
            }
        });
    
        dispatch_async(queue1, ^{
            NSInteger i = 0 ;
            while (i < 10) {
                I++;
                NSLog(@"task1:%ld queue:%@",i,NSThread.currentThread);
            }
        });
        
        dispatch_async(queue1, ^{
            NSInteger i = 0 ;
            while (i < 10) {
                I++;
                NSLog(@"task1-2:%ld queue:%@",i,NSThread.currentThread);
            }
        });
        
        dispatch_async(queue3, ^{
            NSInteger i = 0 ;
            while (i < 10) {
                I++;
                NSLog(@"task3:%ld queue:%@",i,NSThread.currentThread);
            }
        });
        
    

    自行创建的queue,默认优先级是globalqueue的默认优先级即:DISPATCH_QUEUE_PRIORITY_DEFAULT

    queue1里的任务虽然通过dispatch_set_target_queueglobalQueue同步了优先级,但是它的两个任务task1 task1-2还是在同一个线程里以serial串行方式执行的。
    请看下图日志:

    queue日志.png

    祭出demo
    更新日期 2018-08-28

    相关文章

      网友评论

          本文标题:iOS多线程-dispatch_set_target_queue

          本文链接:https://www.haomeiwen.com/subject/mklfwftx.html