let serialQueue = DispatchQueue(label: "com.test.serail")
let concurrentQueue = DispatchQueue(label: "com.test.consurrent", qos: .default, attributes: .concurrent)
主队列是系统创建的串行队列,主要用来操作UI的。
let mainQueue = DispatchQueue.main
全局并发队列
let globalQueue = DispatchQueue.global() // 默认 default
.userInteractive 需要用户交互的, 优先级最高, 和主线程一样
.userInitiated 即将需要, 用户期望优先级, 优先级高比较高
.default 默认优先级
.utility 需要执行一段时间后, 再通知用户, 优先级低
.background 后台执行的, 优先级比较低
.unspecified 不指定优先级, 最低
let qosQueue = DispatchQueue.global(qos: .userInteractive)
queue.sync
同步执行队列,只会在当前线程执行任务,不会开启新线程;
queue.async
异步执行队列,会开启新线程执行任务;
通俗说,就是可以指定在异步并发队列中的某个位置执行栅栏任务
// 并发队列
let concurrentQueue = DispatchQueue(label: "com.test.consurrent", qos: .default, attributes: .concurrent)
let task = DispatchWorkItem(flags: .barrier) {
print("我就是一个栅栏,你看到了嘛")
for item in 0...19 {
if item == 9 {
concurrentQueue.async(execute: task)
concurrentQueue.async {
print(item)
打印结果:
我就是一个栅栏,你看到了嘛
类似于快速分发,类似于OC中dispatch_apply
// 并发队列
let concurrentQueue = DispatchQueue(label: "com.test.consurrent", qos: .default, attributes: .concurrent)
concurrentQueue.async {
print("00000")
DispatchQueue.concurrentPerform(iterations: 10) { index in
print(index)
print("22222")
打印结果:
00000
22222
任务组DispatchGroup
主要用于任务执行完后,会发送出已经完成的通知group.notify
,该通知也是异步执行
// 并发队列
let concurrentQueue = DispatchQueue(label: "com.test.consurrent", qos: .default, attributes: .concurrent)
// 任务组
let group = DispatchGroup()
print("dispatchGroup测试开始")
concurrentQueue.async(group: group) {
print("000")
concurrentQueue.async(group: group) {
print("111")
concurrentQueue.async(group: group) {
print("222")
concurrentQueue.async(group: group) {
print("333")
// queue 任务组完成后执行任务的线程
// group.notify的执行任务也是异步的
group.notify(queue: DispatchQueue.main) {
print("group组结束")
concurrentQueue.async(group: group) {
print("444")
concurrentQueue.async(group: group) {
print("555")
print("dispatchGroup测试结束")
延迟加入队列
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3) {
print("延迟加入队列")
此文章为个人笔记,方便自己以及有需要的朋友查看,转载请注明出处!