Multithreading Swift中的线程间通信?

Multithreading Swift中的线程间通信?,multithreading,swift,nsrunloop,Multithreading,Swift,Nsrunloop,我的目标是用Swift解析一个大的XML文件(20GB)。NSXMLParser和到Swift对象的桥接存在一些性能问题,因此我将研究多线程。特别是以下部门: 主线程-解析数据 工作线程-将ObjC类型转换为Swift类型并发送到1。将ObjC-NSDictionary转换为[String:String]是最大的瓶颈。这也是分离到多个线程的主要原因 工作线程—将XML解析为ObjC类型—并发送到2。NSXMLParser是一个推式解析器,一旦它开始解析,您就不能暂停它 应该按顺序解析数据,因此应

我的目标是用Swift解析一个大的XML文件(20GB)。NSXMLParser和到Swift对象的桥接存在一些性能问题,因此我将研究多线程。特别是以下部门:

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

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

    如何使用Swift实现上述功能(例如,在多个线程上执行nsrunlops)?

    我上个月第一次使用Swift,而且它是一个非常容易子类化的对象,您可以使用完成块将它们链接在一起,也可以将操作设置为彼此的依赖项,以便按顺序执行

    通过向NSOPERATION传递对象,与NSOPERATION通信也非常容易

    NSHipster: