我最近一直在处理一些代码,我想确保某些任务按顺序运行总是在同一个线程上执行。
作为一个体验这将如何工作的实验,我使用这个示例线程示例创建了我自己的线程
我的代码运行良好,因为我在全局队列上调用了一个方法,然后在我的自定义线程上将一个操作排入队列。
func currentQueueName() -> String? {
let name = __dispatch_queue_get_label(nil)
return String(cString: name, encoding: .utf8)
}
DispatchQueue.global().async {
print(self.currentQueueName())
myThread.enqueue {
print(self.currentQueueName())
//prints "com.apple.root.default-qos.overcommit"
for i in 1...100 {
print(i)
}
}
}
每当我在自定义线程执行期间打印出当前线程时,线程名称都会显示。
(“com.apple.root.default-qos.overcommit”)
我没有收到任何错误或崩溃。
1)这个过度提交到底是什么意思?
2)我是如何使用自己的线程造成的?
3) 在生产代码中看到此消息是否危险?
4)如果它很危险,我如何安全地使用我的自定义线程
更新
在阅读了Swift 论坛上的帖子后,我开始认为过度提交队列是指任何不是来自 Dispatch Queue Global 的线程。
不过,我仍然不是 100% 确定。