如何解决作业队列实施:产生更多作业的作业-如何知道一切何时结束?
假设我有一个使用getChildren()
方法的节点,该节点进行API调用以获取其子节点。
我想用修补程序号提取整个树(到节点列表中)。线程。我想使用NSThreads来降低延迟(我从文档中读到的东西是在GCD上使用线程的原因。)
到目前为止,我已经提出了以下建议:
static func queryElementRecursive(rootElement: Node) -> [Node] {
let threadCount = 30
let queueLock = NSLock.init()
let outputLock = NSLock.init()
var output: [Node] = []
var queue: [Node] = [rootElement]
for thread in 1...threadCount {
let thread = Thread.init(block: {
while true {
queueLock.lock()
let eOptional = queue.popLast()
queueLock.unlock()
guard let e = eOptional else {
// I can't break here and kill the thread because I don't know if more children may be enqueued later
continue
}
outputLock.lock()
output.append(e)
outputLock.unlock()
let childrenOptional: [Node]? = try? e.getChildren()
if let children = childrenOptional {
queueLock.lock()
queue.append(contentsOf: children)
queueLock.unlock()
}
}
})
thread.start()
}
// how do i wait for the tree traversal to complete??
return output
}
我面临的问题是不知道遍历何时完成以及线程何时可以退出。我不能空着队列退出,因为每个作业都可以排队更多的作业。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。