Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
使用串行调度队列(假设高优先级或默认优先级)而不是@synchronized块来序列化对资源的访问时是否有性能提升。我所说的增益是指由于同步机制本身而导致的任何开销差异。
@synchronized
当然。但是语义上也存在差异。@synchronized 块在边表中使用递归的、异常安全的互斥锁。所有这些属性都会导致一些额外的开销。dispatch_queue_t 的重量非常轻(尤其是在使用 dispatch_*_f 来避免 Block_copy() 时),但它是非递归的,不处理异常,也不保证特定线程。
就个人而言,我认为递归锁是一个坏主意,异常不应该在 Cocoa 应用程序中被捕获,所以 @synchronized 几乎没有吸引力。
未来编辑:较新的 os_unfair_lock 的开销甚至比任何一个都低得多