ios--GCD中队列和线程

2019-12-04  本文已影响0人  简鱼7819

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,并行队列执行异步任务

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

上一篇下一篇

猜你喜欢

热点阅读