Swift中的线程间通信?

5
我的目标是使用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:performSelector:onThread:withObject:waitUntilDone:}}来实现线程之间的通信。但是在Swift中没有这个符号。
我认为GCD不适合作为解决方案。两个工作线程都应该是长时间运行的进程,新工作随机出现。
如何使用Swift实现上述目标(例如在多个线程上使用NSRunLoops)?
1个回答

0
上个月我第一次使用了NSOperation,它是一个非常容易子类化的对象,你可以使用完成块将它们链接在一起,或者将操作设置为彼此的依赖项,以便按顺序执行。
通过向它们传递对象,与NSOperations进行通信也相当容易。
NSHipster: http://nshipster.com/nsoperation/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接