美文网首页iOS
iOS串行队列与线程关系勘误

iOS串行队列与线程关系勘误

作者: 迷路的安然和无恙 | 来源:发表于2019-04-14 21:51 被阅读11次

前言

为了减少错误观点对他人的影响,我会把平时遇到的有些作者不严谨的博客技术点或者观点在这里进行勘误。
今天要说的是串行队列和异步执行的一个误解。
原作者博客地址
原作者介绍了线程和队列的关系,并且得出如下结论:

串行: 任务以FIFO从序列中一个一个执行。一次只调度一个任务,队列中的任务一个接着一个地执行(一个任务执行完毕后,再执行下一个任务)而且只会开启一条线程。

首先这是个错误观点,或者说非常不严谨。

作者的for循环,创建的线程内部任务并不耗时,并且线程使用完后并不会立即就被销毁,如果在被销毁之前又有新的任务,那就会继续执行任务,所以作者因此认为,串行队列只开启一条线程,这里会让许多人误认为,串行队列只可能在一条线程上执行。

其实多个线程是可以执行同一个串行队列中的任务的,如下示例:

dispatch_queue_t serialQueue = dispatch_queue_create("q_queue", DISPATCH_QUEUE_SERIAL);

    dispatch_async(serialQueue, ^{
        sleep(3);
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(8 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

        });
        NSLog(@"1");
        NSLog(@"%@", [NSThread currentThread]);
    });
    dispatch_sync(serialQueue, ^{
        sleep(1);
        NSLog(@"2");
        NSLog(@"%@", [NSThread currentThread]);
    });
    dispatch_async(serialQueue, ^{
        NSLog(@"3");
        NSLog(@"%@", [NSThread currentThread]);
    });
    dispatch_sync(serialQueue, ^{
        sleep(5);
        NSLog(@"4");
        NSLog(@"%@", [NSThread currentThread]);
    });
    dispatch_async(serialQueue, ^{
        NSLog(@"5");
        NSLog(@"%@", [NSThread currentThread]);
    });

结果可以看出:
有线程3和线程4执行了串行队列中的任务。


image.png

推荐相关阅读

相关文章

  • iOS串行队列与线程关系勘误

    前言 为了减少错误观点对他人的影响,我会把平时遇到的有些作者不严谨的博客技术点或者观点在这里进行勘误。今天要说的是...

  • iOS 队列与线程

    队列和线程是在iOS开发中不可避免的,那么队列与线程有哪些关系呢? 给队列添加任务有四种方式:串行队列中执行同步任...

  • iOS 多线程技术总结

    概览 进程与线程的概念 多线程的由来 并行与并发 多线程的实现 串行与并行 线程的几种状态 串行队列与并发队列区别...

  • 多线程

    iOS中的几种多线程GCD1、GCD分为任务和队列,任务(同步,异步)队列(串行,并发),同步串行,同步主队列的情...

  • 队列和线程

    [iOS多线程中,队列和执行的排列组合结果分析] 多线程中的队列有:串行队列,并发队列,全局队列,主队列。 执行的...

  • iOS底层原理——浅谈多线程

    iOS-浅谈多线程 一、造成线程堵塞的条件: 1、当前串行队列有任务。2、在这个任务中使用同步函数给当前串行队列添...

  • 深入浅出 GCD 线程使用

    串行与并行 同步和异步针对的是线程队列,所谓的线程队列可以理解为一组线程的数组。 串行队列:队列中是事件有序执行,...

  • iOS线程、队列与死锁

    iOS中关于线程和队列,有一些概念:队列、串行队列、并发队列、主线程、主队列、任务、同步、异步。这些概念的意义和联...

  • iOS 整理-线程篇

    什么是进程和线程进程和线程之间的关系什么是任务和队列多线程中同步异步,串行并行iOS中多线程的区别:NSThrea...

  • GCD

    GCD 队列与线程的关系 主队列和主线程 『ios』主线程 和 主队列的关系,绝对安全的UI操作,主线程中一定是主...

网友评论

    本文标题:iOS串行队列与线程关系勘误

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