首先要分清楚
同步和异步是开启线程的能力区别
串行和并发指的是队列也就是开启的线程以什么方式执行
同步(sync)是不能开启线程的,不管是串行队列,并发队列还是主队列都只能串行执行
异步(async)只有在主队列执行是不能开启新线程的,因为主线程已经存在,然后在并发队列,执行并发操作,串行队列执行串行操作
面试题:
主队列
同步方式在主队列的情况
print("1")
DispatchQueue.main.sync {
print("2")
}
print("3")
这个程序只会输出1,后面的2,3不好说了,因为sync本质上会直接执行,并不会有延时的情况,而print("3" )也是没有延时的所以会产生死锁,这种题特别容易出现在面试
print("1")
DispatchQueue.main.async {
print("2")
}
print("3")
比如再来一题,这个答案是1,3,2理由是因为async本质上会等函数执行完再执行,但这里是个先后顺序问题,而并不是时间问题
print("1")
DispatchQueue.main.async {
print("2")
}
print(