Swift GCD用法

/// 主线程队列
let mainQueue = DispatchQueue.main

/// 全局队列
let globalQueue = DispatchQueue.global()

/// 串行队列
let serial = DispatchQueue(label: "serial")

/// 并行队列
let concurrent = DispatchQueue(label: "concurrent", attributes: .concurrent)
/// 异步执行回主线程
DispatchQueue.global().async {
    print("异步执行 --- \(Thread.current)")
    DispatchQueue.main.async {
        print("回主线程 --- \(Thread.current)")
    }
}
/// 延时执行
DispatchQueue.global().asyncAfter(deadline: .now() + 2) {
    print("延时2秒")
}
/// 异步串行
let queue = DispatchQueue(label: "serial") 
queue.async {
    Thread.sleep(forTimeInterval: 3)
    print("1 --- ", Thread.current)
}
queue.async {
    Thread.sleep(forTimeInterval: 1)
    print("2 --- ", Thread.current)
}
queue.async {
    Thread.sleep(forTimeInterval: 2)
    print("3 --- ", Thread.current)
}
/// 异步并行
let queue = DispatchQueue(label: "concurrent", attributes: .concurrent)
queue.async {
    Thread.sleep(forTimeInterval: 3)
    print("1 --- ", Thread.current)
}
queue.async {
    Thread.sleep(forTimeInterval: 1)
    print("2 --- ", Thread.current)
}
queue.async {
    Thread.sleep(forTimeInterval: 2)
    print("3 --- ", Thread.current)
}
/// 异步多任务
let group = DispatchGroup()
let global = DispatchQueue.global()
for i in 0..<4 {
    group.enter()
    global.async {
        /// 耗时操作
        Thread.sleep(forTimeInterval: 5)
        print("任务\(i)完成", Thread.current)
        group.leave()
    }
}
/// 所有任务完成后回主线程
group.notify(queue: .main) {
    print("任务全部完毕", Thread.current)
}
/// 栅栏函数:前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行
let concurrent = DispatchQueue(label: "concurrent", attributes: .concurrent)
concurrent.async(group: group, execute: {
    print("1 ---- ", Thread.current)
})
concurrent.async(group: group, execute: {
    print("2 ---- ", Thread.current)
})
concurrent.async(group: group, flags: .barrier) {
    Thread.sleep(forTimeInterval: 4)
    print("4 ----", Thread.current)
}
concurrent.async(group: group, execute: {
    print("3 ---- ", Thread.current)
})

你可能感兴趣的:(Swift GCD用法)