ios - 如何在 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
解决方案
这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")
推荐阅读
- servlets - XPages 中的 Servlet 通过 Java 设计元素而不是通过普通的 Java 方式工作
- nlp - Transformer 解码器和带有注意力的堆叠 RNN 有多相似?
- html - 递归地从数据库中检索数据
- r - 多变量绘图的 geom_segment 线垂直
- python - 如何在函数中为函数指定参数名称?
- swift - 如何使用手势在 UIImageView 上绘制表情符号
- java - 如何对更改字符响应和请求编码的过滤器进行单元测试 mith Mockito?
- java - 如何在java中将SmbFile锁定给其他用户
- python - 拆分句子但仍保留分隔符?
- postmates - 在 postmates 开发者文档中,没有提到请求参数大小