我的问题背后的原因是我正在为 iPhone 编写一个托管应用程序的音频单元,我需要同步来自音频线程(写入内存)和 GUI 线程(从内存读取)的内存访问。
在寻找阅读该主题的指南时,我发现苹果为 iOS 中的并行编程提供了两个指南(类似指南可用于 OS X):
关于 iOS,我是并行编程的新手;因此,我不清楚我需要阅读哪些指南,或者它们是否涵盖相同的内容。
我的问题背后的原因是我正在为 iPhone 编写一个托管应用程序的音频单元,我需要同步来自音频线程(写入内存)和 GUI 线程(从内存读取)的内存访问。
在寻找阅读该主题的指南时,我发现苹果为 iOS 中的并行编程提供了两个指南(类似指南可用于 OS X):
关于 iOS,我是并行编程的新手;因此,我不清楚我需要阅读哪些指南,或者它们是否涵盖相同的内容。
这是写在线程编程指南内的警告框中
重要提示:如果您正在开发新的应用程序,我们鼓励您研究用于实现并发的替代 OS X 技术。如果您还不熟悉实现线程应用程序所需的设计技术,则尤其如此。这些替代技术简化了实现并发执行路径所需的工作量,并提供比传统线程更好的性能。有关这些技术的信息,请参阅并发编程指南。
因此,真正的区别在于线程编程指南较旧,并且不鼓励在现代 Objective-C 中使用。
但是,正如评论中所指出的,对于需要极低延迟的操作(如实时音频编辑)不适合NSOperation
和GCD
。
并发编程指南将是您在调度 API(又名 GCD)和NSOperation
s 方面的速成课程。
线程编程指南将向您介绍线程、互斥和同步 API 和技术。它们还将涵盖线程的创建和与运行循环的交互。
对于您陈述的问题,线程编程指南中的信息将更有用。
然而,这些指南所呈现的大部分内容都是阻止是可以的心态。在实时音频中,这是不行的。
AudioUnit Hosting Fundamentals 也是必读的:http: //developer.apple.com/library/ios/#documentation/MusicAudio/Conceptual/AudioUnitHostingGuide_iOS/AudioUnitHostingFundamentals/AudioUnitHostingFundamentals.html
如果您正在为您的 UI 设置动画,您可能需要实现/找到一个循环缓冲区实现。
当心 - 如果您不熟悉并发设计,实时并发将是一个棘手的主题。