美文网首页ios开发那些事
DispatchQueue中的main和global

DispatchQueue中的main和global

作者: poloStar | 来源:发表于2018-06-11 16:06 被阅读1426次

    首页在DispatchQueue中main队列是串行队列而global()队列则是并行队列,那么对于在他们中添加异步线程的执行顺序如何呢?

    一、Main队列中添加异步线程的执行顺序

    在主队列中添加异步线程

    首先在主线程队列中先添加一个异步线程然后让当前线程睡眠1秒,然后再在异步线程中再在主线程队列中添加两个异步线程,让第二个异步线程先睡眠2秒再执行,他们的输出结果是:

    上图主线程队列的输出结果

    结果分析:

    首先main队列是串行队列,切记主队列是串行队列,所以首先会先睡眠1秒,然后执行输出后,才执行第一个加入主队列的异步任务,所以先输出3,再输出2,最后输出4。总之,在串行队列中,他们的执行顺序和他们加入队列的顺序有关, 加入异步任务不会阻塞主线程也不会开辟新的线程,但是依旧串行。

    二、global()队列中添加异步线程的执行顺序

    在全局队列中添加异步线程

    首先在全局队列中先添加一个异步线程后当前线程睡眠1秒,然后再该异步线程中再在全局队列中添加两个异步线程,让第二个异步线程同样先睡眠2秒再执行,他们的输出结果是:

    上图全局队列的第一种输出结果 上图全局队列的第二种输出结果

    结果分析:

    global()队列是异步队列,那么在其中添加异步线程后就会立即执行,所以才会出现上面两种可能的结果。但是,最外面的当前线程则是先睡眠1秒再执行,里面添加的第二个异步线程则是先睡眠2秒执行,所以才会出现上面的结果。所以,在异步队列中异步线程的执行和添加顺序无关。

    相关文章

      网友评论

        本文标题:DispatchQueue中的main和global

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