美文网首页
iOS多线程排列组合(GCD)

iOS多线程排列组合(GCD)

作者: 辣椒切成丝 | 来源:发表于2017-12-27 15:08 被阅读24次

    DEMO地址

    1. 串行队列,同步执行

    示例代码:

    运行结果:

    结束可以看到是在主线程顺序执行的

    2. 串行队列,异步执行

    示例代码:

    运行结果:

    结论可以看到系统只开了一条线程,都是在线程3上执行的,并且是顺序执行

    3. 并发队列,同步执行

    示例代码:

    运行结果:

    结论可以看到是在主线程上顺序执行的,跟第一种结论是一样的, 由此可以看出,开不开线程是同步换是异步控制的

    4. 并发队列,异步执行

    示例代码:

    运行结果:

    结论看出开启了多条线程并且是无序执行的

    5. 全局队列,同步执行

    示例代码:

    运行结果:

    结论可以看出是在主线程上顺序执行的

    6. 全局队列,异步执行

    示例代码:

    运行结果:

    结论可以看出是开启的多条线程,并且执行的顺序是混乱的,跟并发队列异步执行的结果是一样的

    7. 主队列,同步执行

    示例代码:

    运行结果:

    结论可以看出来,发生"死锁"了,卡死了,卡死的原因是循环等待,主队列的东西要等主线程执行完,而因为是同步执行不能开线程,所以下面的任务要等上面的任务执行完,所以卡死。这是排列组合中唯一一个会卡死的组合

    8. 主队列,异步执行

    示例代码:

    运行结果:

    结论可以看出来是在主线程顺序执行的

    总结:

    1, 同步开线程,异步不开线程,开不开线程是由同步换是异步控制的!

    2, 开几条线程,取决于串行队列换是并发队列,串行队列只开一条线程,并发队列开多条线程(异步情况下)

    3, 主队列只能在主线程下执行任务,不能再其他线程上执行!


    DEMO地址

    相关文章

      网友评论

          本文标题:iOS多线程排列组合(GCD)

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