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,并行队列执行异步任务
开启了新线程,任务不是顺序执行的!