【问题标题】:For iOS, what is the difference of the Concurrency Programming Guide and the Threading Programming Guide?对于 iOS,并发编程指南和线程编程指南有什么区别?
【发布时间】:2013-07-14 10:39:56
【问题描述】:

我的问题背后的原因是我正在为 iPhone 编写一个托管应用程序的音频单元,我需要同步来自音频线程(写入内存)和来自 GUI 线程(从内存读取)的内存访问。

在寻找阅读该主题的指南时,我发现苹果为 iOS 中的并行编程提供了两个指南(类似指南适用于 OS X):

关于 iOS,我是并行编程的新手;因此我不清楚我需要阅读哪些指南,或者它们是否涵盖相同的内容。

【问题讨论】:

  • Q&A 是一本好书,看看吧!
  • @Amar:值得一读。谢谢!

标签: ios objective-c multithreading macos concurrency


【解决方案1】:

这写在线程编程指南内的警告框中

重要提示:如果您正在开发新的应用程序,我们鼓励您研究用于实现并发的替代 OS X 技术。如果您还不熟悉实现线程应用程序所需的设计技术,则尤其如此。这些替代技术简化了实现并发执行路径所需的工作量,并提供比传统线程更好的性能。有关这些技术的信息,请参阅并发编程指南。

因此,真正的区别在于线程编程指南较旧,并且不鼓励在现代 Objective-C 中使用。

但是,如 cmets 中所述,对于需要极低延迟的操作(如实时音频编辑)不适合 NSOperationGCD

【讨论】:

  • 在大多数情况下,这似乎是一个不错的决定。但是,我看不到如何使用调度队列和操作队列(并发编程指南的主要构建块)来管理对共享内存的访问。这里的问题似乎是使用 AudioUnit 框架已经将您绑定到在您的应用程序中运行不同的线程。我无法避免这一点。您能否按照并发编程指南举例说明如何同步内存访问?
  • 好吧,我不会写一个例子,但我会告诉你,这正是串行调度队列的意义所在。如果您将所有共享内存操作放入其中之一,您将是线程安全的。看看它,那里有很多关于它的信息。
  • @borrrden 因为 GCD 和 NSOperation 阻塞,它们可能无法在这种情况下使用
  • @justin 我认为你是对的,但这似乎是我从这两个指南中得到的总体感觉。我会在我的回答中做笔记。
【解决方案2】:

并发编程指南将是您在调度 API(又名 GCD)和NSOperations 方面的速成课程。

线程编程指南将向您介绍线程、互斥和同步 API 和技术。它们还将涵盖线程的创建和与 Run Loops 的交互。

对于您所说的问题,线程编程指南中的信息会更有用。

但是,这些指南所呈现的大部分内容都是认为屏蔽是可以的。在实时音频中,不行。

AudioUnit Hosting Fundamentals 也是必读的:http://developer.apple.com/library/ios/#documentation/MusicAudio/Conceptual/AudioUnitHostingGuide_iOS/AudioUnitHostingFundamentals/AudioUnitHostingFundamentals.html

如果您正在为您的 UI 设置动画,您可能需要实现/找到一个循环缓冲区实现。

当心 - 如果您不熟悉并发设计,实时并发将是一个棘手的主题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多