队列
- 串行队列
- 并行队列
// 主队列异步
DispatchQueue.main.async {
print("main async \(Thread.current)")
}
//
DispatchQueue.global().async {
print("global() async \(Thread.current)")
}
// 串行队列同步
let serialQueue = DispatchQueue(label: "squeue")
serialQueue.sync {
print("serialQueue sync \(Thread.current)")
}
// 串行队列异步
serialQueue.async {
print("serialQueue async \(Thread.current)")
}
// 并行队列异步
let parallQueue = DispatchQueue(label: "pqueue", attributes: .concurrent)
parallQueue.async {
print("parallQueue async \(Thread.current)")
}
- 同步执行。不开启新的线程
- 异步执行。开启新的线程
串行同步
- 同步执行,所以不创建新的线程,在主线程中执行。
- 串行队列,所以队列的任务一个接一个地执行
串行异步
- 因为是异步执行,所以创建了新的线程。
- 因为是串行队列,所以队列中的任务一个接一个执行。
并行同步
无意义,无法体现并行
并行异步
- 因为异步执行,所以创建了新的线程。注意创建多个线程
- 因为并发队列,异步执行时体现其并发性,任务之间交替着同时执行
// 延迟执行
let delay = DispatchTime.now() + DispatchTimeInterval.seconds(5)
DispatchQueue.main.asyncAfter(deadline: delay) {
print("main async after \(Thread.current)")
}