ios - 如何在iOS上使用Dispatch Queue问题?

标签 ios swift multithreading grand-central-dispatch

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

DispatchQueue.global()
在后台执行代码。
还可以使用以下方法创建自己的队列:
DispatchQueue(label: "my own queue")
这里有什么更好的方法或建议?使用GCD的global()队列还是创建我自己的队列?
一个例子:我想用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)
你怎么看? example1 example2

最佳答案

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")

关于ios - 如何在iOS上使用Dispatch Queue问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63151215/

相关文章:

ios - NSMicrophoneUsageDescription 是否需要,即使它未被使用?

ios - 如何在 xcode 中显示所有模拟器输出

ios - 将自定义标题添加到 ray wenderlich Pinterest 布局

c++ - 长期运行时 CreateThread 失败

c# - 线程池顺序运行?

ios - 使用的是哪个手势识别器?

ios - handleTurnEventForMatch :didBecomeActive: callbacks only arriving some of the time

arrays - 将字符串参数传递给函数以访问数组的属性

ios - 如何让 AKSequencer 切换音色?

c++ - Boost线程问题,当一个线程与另一个线程没有相同的拷贝时如何共享变量?