美文网首页
ios--GCD中队列和线程

ios--GCD中队列和线程

作者: 简鱼7819 | 来源:发表于2019-12-04 18:15 被阅读0次

    1,主队列dispatch_get_main_queue()

    获取主队列

    dispatch_queue_t queue = dispatch_get_main_queue();

    1.1、主队列执行异步任务

    主队列异步

    结果打印

    主队列异步执行结果

    可以看出currentThread都是main主线程,异步没有开辟新线程。同时任务执行的任务方式是顺序执行,也就是串行。

    1.2、主队列执行同步任务

    结果App崩溃,原因便是主队列同步执行容易阻塞主线程,因为代码任务需要马上执行,但是主线程正在执行代码任务的方法体,因此代码任务就必须等待,而主线程又在等待代码任务的完成好去完成下面的任务,因此就形成了相互等待,造成了死锁

    综上所述,如果想要运用主队列,获取主队列并添加异步任务,同时添加多个任务,任务是顺序串行执行的。主队列不允许添加同步任务。

    2,串行队列

    2.1,串行队列执行同步任务

    在主线程中依次执行任务,不会开启新线程

    2.2,串行队列执行异步任务

    结果是创建新线程执行的任务,但是在新建的线程中是依次执行的任务。

    综上可以看出,串行队列里无论是异步还是同步都是顺序执行任务的,异步会创建新线程。

    3,并行队列

    3.1,并行队列执行同步任务

    不开启新线程,在main线程执行。顺序打印!

    3.2,并行队列执行异步任务

    开启了新线程,任务不是顺序执行的!

    相关文章

      网友评论

          本文标题:ios--GCD中队列和线程

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