2

我最近一直在处理一些代码,我想确保某些任务按顺序运行总是在同一个线程上执行。

作为一个体验这将如何工作的实验,我使用这个示例线程示例创建了我自己的线程

我的代码运行良好,因为我在全局队列上调用了一个方法,然后在我的自定义线程上将一个操作排入队列。

 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% 确定。

4

0 回答 0