swift - swift 中的并行编程是否消除了值类型优化?

标签 swift swift3 grand-central-dispatch value-type

据我所知,swift 中的值类型可以更高效,因为它们存储在堆栈而不是堆中。但是,如果您对 DispatchQueue.syncDispatchQueue.async 进行多次调用,这是否会因为闭包存储在堆上而使值类型的优势消失?

最佳答案

As I understand it value types in swift can be more performant because they are stored on the stack as opposed to the heap.

有时。通常不是。例如,String 包括堆分配存储。许多值类型都有隐藏的堆分配存储空间(这实际上真的很常见)。因此,对于许多类型,您可能无法获得预期的性能提升,但在许多情况下,您也不会因闭包而失去性能提升。

值类型是关于行为的,而不是性能(当然你需要区分 value types and value semantics ,它们是不同的,并且会对性能产生影响)。所以关于值类型和 DispatchQueue 的好处是您知道您不会意外地修改多个队列上的值,因为您知道您有自己的独立副本。当您支付分配到队列的开销时(经过优化,但仍然不便宜),复制值类型的额外成本可能不是主要问题。

根据我的经验,很难推断 Swift 的性能,尤其是由于写时复制优化。但明显的“值类型”可能具有隐藏的内部引用类型这一事实也使性能分析变得非常棘手。您通常必须了解并依赖可能发生变化的内部细节。要开始了解 Swift 性能,您绝对应该观看 Understand Swift Performance (可能有几次)。如果您要从 C++ 中汲取任何性能直觉,那么您必须为 Swift 抛弃几乎所有这些直觉。它只是做了很多不同的事情。

关于swift - swift 中的并行编程是否消除了值类型优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41290756/

相关文章:

ios - UIPickerView数据源x委托(delegate)设计

ios - 如何使用自动布局相对于 UIView 高度移动 UILabel?

ios - 为现有实体创建新的 CoreData 属性时 Swift 崩溃

ios - Unresolved loginManager Facebook SDK swift3

ios - 您如何调用/使用位于子项目中的 Storyboard

ios - Swift 中的 dispatch_once 单例

ios - 使用 Audio Unit 录音回调处理数据 [iOS][Swift]

swift - ascii to string swift 3 问题

swift - 在我看来,UIActivityIndi​​cator 显示在其他所有内容后面

ios - 现在如何知道带有嵌套循环的多个服务器调用方法何时全部完成