美文网首页
多线程之GCD

多线程之GCD

作者: 杰森斯坦sen | 来源:发表于2018-04-27 14:37 被阅读0次

GCD的队列分为串行队列和并行队列两类:

串行队列:只有一个线程,加入到队列中的操作按添加顺序依次执行。
并发队列:有多个线程,操作进来之后它会将这些队列安排在可用的处理器上,同时保证先进来的任务优先处理。

串行队列

使用串行队列时首先要创建一个串行队列,然后调用异步调用方法。

let serialQueue = DispatchQueue(label: "serialQueue")

并行队列

使用串行队列时首先要创建一个串行队列,然后调用异步调用方法。

let concurrentQueue = DispatchQueue(label: "concurrentQueue", qos: .utility, attributes: .concurrent)

concurrentQueue.async {
}

在实际开发中我们通常使用DispatchQueue.global()方法取得一个全局的并行队列。

DispatchQueue.global().async {

    DispatchQueue.main.async {
        // 更新UI操作
    }
}

attributes 参数也可以接受.initiallyInactive 的值。这样任务不会被自动执行,而是需要手动去触发。默认是串行队列,如果需要并行队列,需要attributes参数填加.concurrent。

let anotherQueue = DispatchQueue(label: "anotherQueue", qos: .utility, attributes: .initiallyInactive)
if let queue = inactiveQueue {
    queue.activate()
}

QoS

上面初始化DispatchQueue时我们用了qos参数,用于指定任务重要程度以及优先级的信息。
Apple定义的QoS优先级从高到低有:

  • userInteractive
  • userInitiated
  • default
  • utility
  • background
  • unspecified

主队列默认拥有更高的优先级。
全局队列默认优先级是default,也可以修改优先级,但是不建议这样做。

let globalQueue = DispatchQueue.global(qos: .userInitiated)

主队列和全局队列

主队列和全局队列是系统定义的队列,也是我们最常用的队列。
主队列是作为更新 UI 而使用。

DispatchQueue.main.async {
    // 更新UI操作
}

全局队列是系统定义的并行队列,上面并行队列中有介绍过。

DispatchWorkItem

DispatchWorkItem 是一个代码块,它可以在任意一个队列上执行,因此它里面的代码可以在后台运行,也可以在主线程运行。
当一个任务项被调用后,你可以通知主队列或者其他队列。

let workItem = DispatchWorkItem {
    // Do something
}
let queue = DispatchQueue.global()
queue.async(execute: workItem)
workItem.notify(queue: DispatchQueue.main) {
    // Do something
}

链接

A deep dive into Grand Central Dispatch in Swift
Swift 3 中的 GCD 与 Dispatch Queue

相关文章

  • iOS开发多线程之GCD

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 GCD...

  • iOS开发之GCD并发队列

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 03 ...

  • iOS开发之GCD同步任务加强

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 004...

  • iOS开发之GCD串行队列

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 实例d...

  • 7.3 多线程-GCD

    多线程-GCD 多线程-GCD-串行并行 多线程-GCD.png GCD-线程的通讯、延时操作、定时器 GCD-线...

  • GCD

    iOS多线程 Swift4 GCD深入解析swift GCD 的一些高级用法GCD 之线程组(Dispatch G...

  • iOS多线程:『GCD』详尽总结

    iOS多线程:『GCD』详尽总结 iOS多线程:『GCD』详尽总结

  • iOS面试之多线程模块

    多线程 多线程内容如下: GCD NSOperation NSThread 多线程与锁 1.GCD 同步/异步和串...

  • iOS多线程编程技术之NSThread、Cocoa NSOper

    iOS多线程编程技术之NSThread、Cocoa NSOperation、GCD - 博客 - 伯乐在线

  • iOS 多线程

    iOS 多线程有几种方式 GCD NSOpeartion NSThread phread 多线程 GCD disp...

网友评论

      本文标题:多线程之GCD

      本文链接:https://www.haomeiwen.com/subject/qwcvkftx.html