美文网首页
iOS GCD初识.md

iOS GCD初识.md

作者: 儒徒 | 来源:发表于2020-07-22 14:33 被阅读0次

    串行队列

    • 串行队列:操作是按顺序执行的,并且都在同一个线程上输出
    • 一个串行队列对应只有一个线程,因此同时只能执行一个操作,先追加的操作先执行。执行很多操作的时候就好像人们排队买东西一样,先来后到。
    同步执行
    dispatch_queue_t queue = dispatch_queue_create("com.kenan.comQueue", DISPATCH_QUEUE_SERIAL);
        //dispatch_sync::执行方式-同步步,会阻塞运行
        dispatch_sync(queue, ^{
            NSLog(@"1%@",[NSThread currentThread]);
        });
        NSLog(@"2%@",[NSThread currentThread]);
        dispatch_sync(queue, ^{
            NSLog(@"3%@",[NSThread currentThread]);
        });
        NSLog(@"4%@",[NSThread currentThread]);
        dispatch_sync(queue, ^{
            NSLog(@"5%@",[NSThread currentThread]);
        });
        NSLog(@"6%@",[NSThread currentThread]);
    
    串行-同步Snip20200715_50.png
    异步执行
    dispatch_queue_t queue = dispatch_queue_create("com.kenan.comQueue", DISPATCH_QUEUE_SERIAL);
    //dispatch_async:执行方式-异步,不会阻塞运行
    
        dispatch_async(queue, ^{
            NSLog(@"1%@",[NSThread currentThread]);
        });
        NSLog(@"2%@",[NSThread currentThread]);
        dispatch_async(queue, ^{
            NSLog(@"3%@",[NSThread currentThread]);
        });
        NSLog(@"4%@",[NSThread currentThread]);
        dispatch_async(queue, ^{
            NSLog(@"5%@",[NSThread currentThread]);
        });
        NSLog(@"6%@",[NSThread currentThread]);
    
    串行-异步Snip20200715_51.png

    并发队列

    同步执行
    dispatch_queue_t conccurentQueue = dispatch_queue_create("com.kenan.comQueue", DISPATCH_QUEUE_CONCURRENT);
        //dispatch_sync::执行方式-同步步,会阻塞运行。不会开辟线程。
        dispatch_sync(conccurentQueue, ^{
            NSLog(@"1%@",[NSThread currentThread]);
        });
        NSLog(@"2%@",[NSThread currentThread]);
        dispatch_sync(conccurentQueue, ^{
            NSLog(@"3%@",[NSThread currentThread]);
        });
        NSLog(@"4%@",[NSThread currentThread]);
        dispatch_sync(conccurentQueue, ^{
            NSLog(@"5%@",[NSThread currentThread]);
        });
        NSLog(@"6%@",[NSThread currentThread]);
    
    并发同步Snip20200715_52.png
    异步执行
    dispatch_queue_t conccurentQueue = dispatch_queue_create("com.kenan.comQueue", DISPATCH_QUEUE_CONCURRENT);
    //dispatch_async:执行方式-异步,不会阻塞运行。会开辟线程,线程数量取决于GCD
        dispatch_async(conccurentQueue, ^{
            NSLog(@"1%@",[NSThread currentThread]);
        });
        NSLog(@"2%@",[NSThread currentThread]);
        dispatch_async(conccurentQueue, ^{
            NSLog(@"3%@",[NSThread currentThread]);
        });
        NSLog(@"4%@",[NSThread currentThread]);
        dispatch_async(conccurentQueue, ^{
            NSLog(@"5%@",[NSThread currentThread]);
        });
        NSLog(@"6%@",[NSThread currentThread]);
    
    并行-异步Snip20200715_53.png

    串行队列同步/异步、并发队列同步/异步

    Snip20200722_124.png

    相关文章

      网友评论

          本文标题:iOS GCD初识.md

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