首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在iOS上使用调度队列问题?

如何在iOS上使用调度队列问题?
EN

Stack Overflow用户
提问于 2020-07-29 10:08:15
回答 2查看 377关注 0票数 1

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

全球气候变化理事会向我们提供:

代码语言:javascript
复制
DispatchQueue.global()

在后台执行代码。还可以使用以下方法创建自己的队列:

代码语言:javascript
复制
DispatchQueue(label: "my own queue")

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

举个例子:我想用Network.Framework做一些网络内容。

下面是示例1:

代码语言:javascript
复制
    let connection = NWConnection(host: "1.2.3.4", port: 40000, using: .udp)
    let queue = DispatchQueue(label: "network queue")
    connection.start(queue: queue)

下面是示例2:

代码语言:javascript
复制
    let connection = NWConnection(host: "1.2.3.4", port: 40000, using: .udp)
    let queue = DispatchQueue.global()
    connection.start(queue: queue)

你怎么看?example1 vs example2

EN

回答 2

Stack Overflow用户

发布于 2020-07-29 10:35:33

这个DispatchQueue.global()是一个并发队列,意味着提交给返回队列的任务是并行调度的。

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

当your取决于您的情况时,在框架/库中通常使用创建队列的选项,以便将它们的工作与代码分开,如果您发现在使用中超过了队列,然后创建一个新的队列,那么拥有一个就绪的全局队列是非常方便的。

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

代码语言:javascript
复制
 print("1")
 print("2")
 print("3")

有了global,你就能得到

代码语言:javascript
复制
 print("1")
 print("3")
 print("2") 
 print("3")
 print("1")
 print("2")

同时创建队列

代码语言:javascript
复制
 print("1")
 print("2")
 print("3")

 print("1")
 print("2")
 print("3")
票数 1
EN

Stack Overflow用户

发布于 2020-08-05 23:39:59

tl;dr

您可能希望为这个示例创建一个自定义的串行队列。您可能会喜欢这个很好的描述性名称,它简化了调试。您可能希望在这个队列上进行串行行为,这样可以更容易地对逻辑进行推理,并避免引入额外的线程安全问题。

关于你的一般性问题:

使用GCD中的全局()队列,还是创建自己的队列?

可能要求您选择自定义队列而不是全局队列的几个注意事项:

  1. 您需要串行行为还是并发行为?全局队列是并发的,所以如果需要串行行为,就不会使用它们。(注意,如果您想要并发队列,这并不一定意味着您必须使用全局队列。您也可以创建自己的自定义并发队列。我的意思仅仅是,如果您想要一个串行行为,就不能使用全局队列。)

  1. ,您可能想以任何理由挂起队列吗?不能挂起全局队列。

  1. 你有没有想过使用障碍?不能在全局队列上使用屏障。

  1. 想要命名您的队列,以便您可以诊断项目中的相关子系统(例如,当您查看堆栈跟踪或使用仪器进行分析时)。可以为自定义队列提供有意义的名称,以简化调试。

尽管如此,我还是使用全局队列来执行简单、短、一次性的任务.为了获得更好的调试体验,我倾向于为运行时间较长的任务或与我的应用程序中的特定逻辑子系统相关联的任务使用名称良好的自定义队列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63151215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档