gpt4 book ai didi

multithreading - Swift 中的线程间通信?

转载 作者:搜寻专家 更新时间:2023-10-31 21:48:54 26 4
gpt4 key购买 nike

我的目标是使用 Swift 解析大型 XML 文件 (20 GB)。 NSXMLParser 和桥接到 Swift 对象存在一些性能问题,所以我正在研究多线程。具体划分如下:

  1. 主线程 - 解析数据
  2. 工作线程 - 将 ObjC 类型转换为 Swift 类型并发送到 1。将 ObjC NSDictionary 转换为 [String: String] 是最大的瓶颈。这也是分离到多线程的主要原因。
  3. 工作线程 - 将 XML 解析为 ObjC 类型 - 并发送到 2。NSXMLParser 是一个推送解析器,一旦开始解析,就无法暂停。

数据应按顺序解析,因此应保持输入顺序。我的想法是在 1 和 2 上运行一个 NSRunLoop,允许并行处理而不阻塞。根据Apple的文档,线程之间的通信可以通过调用performSelector:onThread:withObject:waitUntilDone:来实现。 .但是,此符号在 Swift 中不可用。

我认为 GCD 不适合作为解决方案。两个工作线程都应该是长期运行的进程,新工作会以随机间隔进行。

如何使用 Swift 实现上述目标(例如多线程上的 NSRunLoops)?

最佳答案

我用了NSOperation这是上个月的第一次,它是一个非常容易子类化的对象,您可以将它们与完成 block 链接在一起,或者您可以将操作设置为彼此依赖,以便它们按顺序执行。

通过将对象传递给它们,与 NSOperations 进行通信也非常容易。

NSHipster:http://nshipster.com/nsoperation/

关于multithreading - Swift 中的线程间通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26602473/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com