添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
 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("延迟加入队列")
    此文章为个人笔记,方便自己以及有需要的朋友查看,转载请注明出处!