首页 > 解决方案 > 如何在 iOS 上使用调度队列问题?

问题描述

我想知道在带有 GCD 的 iOS 上使用自己的队列/线程的主要规则是什么。

GCD 为我们提供:

DispatchQueue.global()

在后台执行代码。也可以创建自己的队列:

DispatchQueue(label: "my own queue")

这里有什么更好的方法或建议?使用global()GCD 的队列还是创建我自己的队列?

一个例子:我想用Network.Framework.

这是示例 1:

    let connection = NWConnection(host: "1.2.3.4", port: 40000, using: .udp)
    let queue = DispatchQueue(label: "network queue")
    connection.start(queue: queue)

这是示例 2:

    let connection = NWConnection(host: "1.2.3.4", port: 40000, using: .udp)
    let queue = DispatchQueue.global()
    connection.start(queue: queue)

你怎么看?示例 1示例 2

标签: iosswiftmultithreadinggrand-central-dispatch

解决方案


DispatchQueue.global()是一个并发队列,这意味着提交到返回队列的任务是相对于彼此同时调度的。

虽然这DispatchQueue(label: "network queue")是一个串行队列,但提交的任务一个接一个地运行

当你使用取决于你的情况时,创建队列的选项通常在框架/库中用于将它们的工作与你的代码分开,如果你发现你的使用压倒了它,那么有一个准备好的全局队列是为了方便使用然后创建一个新的


您的示例可以解释为,如果您在每次连接更改时调用的方法中都有该示例

 print("1")
 print("2")
 print("3")

有了global你会得到

 print("1")
 print("3")
 print("2") 
 print("3")
 print("1")
 print("2")

在创建队列时

 print("1")
 print("2")
 print("3")

 print("1")
 print("2")
 print("3")

推荐阅读