我的目标是使用Swift解析一个大型XML文件(20 GB)。NSXMLParser和桥接到Swift对象存在一些性能问题,因此我正在考虑多线程。具体分为以下几个部分:
1. 主线程 - 解析数据 2. 工作线程 - 将ObjC类型转换为Swift类型并发送到1。将ObjC NSDictionary转换为[String:String]是最大的瓶颈。这也是分离到多个线程的主要原因。 3. 工作线程 - 将XML解析为ObjC类型 - 并发送到2。NSXMLParser是推式解析器,一旦开始解析,就无法暂停。
数据应按顺序解析,因此应保持输入顺序。我的想法是在1和2上运行NSRunLoop,允许并行处理而不阻塞。根据Apple的文档,可以通过调用{{link1:
我认为GCD不适合作为解决方案。两个工作线程都应该是长时间运行的进程,新工作随机出现。
如何使用Swift实现上述目标(例如在多个线程上使用NSRunLoops)?
1. 主线程 - 解析数据 2. 工作线程 - 将ObjC类型转换为Swift类型并发送到1。将ObjC NSDictionary转换为[String:String]是最大的瓶颈。这也是分离到多个线程的主要原因。 3. 工作线程 - 将XML解析为ObjC类型 - 并发送到2。NSXMLParser是推式解析器,一旦开始解析,就无法暂停。
数据应按顺序解析,因此应保持输入顺序。我的想法是在1和2上运行NSRunLoop,允许并行处理而不阻塞。根据Apple的文档,可以通过调用{{link1:
performSelector:onThread:withObject:waitUntilDone:
}}来实现线程之间的通信。但是在Swift中没有这个符号。我认为GCD不适合作为解决方案。两个工作线程都应该是长时间运行的进程,新工作随机出现。
如何使用Swift实现上述目标(例如在多个线程上使用NSRunLoops)?