Swift中的线程间通信?

时间:2014-10-28 06:56:12

标签: multithreading swift nsrunloop

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

  1. 主要线程 - 解析数据
  2. 工作线程 - 将ObjC类型转换为Swift类型并发送到1.将ObjC NSDictionary转换为[String:String]是最大的瓶颈。这也是分离到多个线程的主要原因。
  3. 工作线程 - 将XML解析为ObjC类型 - 并发送到2. NSXMLParser是一个推送解析器,一旦开始解析,就不能暂停它。
  4. 应该按顺序解析数据,因此应保持输入顺序。我的想法是在1和2上运行NSRunLoop,允许并行处理而不会阻塞。根据Apple的文档,可以通过调用performSelector:onThread:withObject:waitUntilDone:来实现线程之间的通信。但是,此符号在Swift中不可用。

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

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

1 个答案:

答案 0 :(得分:0)

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

通过将对象传递给NSOperations也非常容易。

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