iOS多线程:『GCD』详尽总结(四):异步执行 + 串行队列

作者: Python雁横 | 来源:发表于2018-05-25 23:08 被阅读9次

    4.4 异步执行 + 串行队列

    会开启新线程,但是因为任务是串行的,执行完一个任务,再执行下一个任务
    
    /**
     * 异步执行 + 串行队列
     * 特点:会开启新线程,但是因为任务是串行的,执行完一个任务,再执行下一个任务。
     */
    - (void)asyncSerial {
        NSLog(@"currentThread---%@",[NSThread currentThread]);  // 打印当前线程
        NSLog(@"asyncSerial---begin");
        
        dispatch_queue_t queue = dispatch_queue_create("net.bujige.testQueue", DISPATCH_QUEUE_SERIAL);
        
        dispatch_async(queue, ^{
            // 追加任务1
            for (int i = 0; i < 2; ++i) {
                [NSThread sleepForTimeInterval:2];              // 模拟耗时操作
                NSLog(@"1---%@",[NSThread currentThread]);      // 打印当前线程
            }
        });
        dispatch_async(queue, ^{
            // 追加任务2
            for (int i = 0; i < 2; ++i) {
                [NSThread sleepForTimeInterval:2];              // 模拟耗时操作
                NSLog(@"2---%@",[NSThread currentThread]);      // 打印当前线程
            }
        });
        dispatch_async(queue, ^{
            // 追加任务3
            for (int i = 0; i < 2; ++i) {
                [NSThread sleepForTimeInterval:2];              // 模拟耗时操作
                NSLog(@"3---%@",[NSThread currentThread]);      // 打印当前线程
            }
        });
        
        NSLog(@"asyncSerial---end");
    }
    
    image.png

    在异步执行 + 串行队列可以看到:

    • 开启了一条新线程(异步执行具备开启新线程的能力,串行队列只开启一个线程)。
    • 所有任务是在打印的syncConcurrent---begin和syncConcurrent---end之后才开始执行的(异步执行不会做任何等待,可以继续执行任务)。
    • 任务是按顺序执行的(串行队列每次只有一个任务被执行,任务一个接一个按顺序执行)。

    下一章讲讲刚才我们提到过的特殊队列:主队列。

    主队列:GCD自带的一种特殊的串行队列

    • 所有放在主队列中的任务,都会放到主线程中执行
    • 可使用dispatch_get_main_queue()获得主队列

    本文摘自网上,觉得比较好希望跟大家分享一下,如有侵权,请联系小编删除,并且在此给大家推荐一个学习交流的iOS学习交流q-un,681-503-716,加群验证填(雁横)或者文章的名字就行,大家能够看到我的文章也是缘分,而且也希望看到我文章的朋友们可以一起交流,学习。

    相关文章

      网友评论

        本文标题:iOS多线程:『GCD』详尽总结(四):异步执行 + 串行队列

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