串行队列
let queue = DispatchQueue(label: "")
let queue = DispatchQueue(label: "", qos: .background) // qos: 优先级
queue.async {
//异步串行,只开启一条新线程,串行执行任务
}
queue.sync {
//同步串行,不开启新线程,串行执行任务
}
主队列
let queue = DispatchQueue.main
queue.sync {
// 主队列同步任务,不开启新线程,串行执行任务
}
queue.async {
// 主队列异步任务,不开启新线程,串行执行任务
}
并发队列
let queue = DispatchQueue(label: "", attributes: .concurrent)
let queue = DispatchQueue(label: "", qos: .utility, attributes: .concurrent)
queue.async {
//异步并发,开启新线程,并发执行任务
}
queue.sync {
//同步并发,不开启新线程,串行执行任务
}
全局并发队列
let queue = DispatchQueue.global()
queue.async {
//异步并发,开启新线程,并发执行任务
}
queue.sync {
//同步并发,不开启新线程,串行执行任务
}
结论:
同步任务,不管什么队列,全都不开启新线程,串行执行任务
异步任务,主队列不开启,串行执行;串行队列,开启一条,串行执行;并发队列,开启多条,并发执行