2

使用串行调度队列(假设高优先级或默认优先级)而不是@synchronized块来序列化对资源的访问时是否有性能提升。我所说的增益是指由于同步机制本身而导致的任何开销差异。

4

1 回答 1

3

当然。但是语义上也存在差异。@synchronized 块在边表中使用递归的、异常安全的互斥锁。所有这些属性都会导致一些额外的开销。dispatch_queue_t 的重量非常轻(尤其是在使用 dispatch_*_f 来避免 Block_copy() 时),但它是非递归的,不处理异常,也不保证特定线程。

就个人而言,我认为递归锁是一个坏主意,异常不应该在 Cocoa 应用程序中被捕获,所以 @synchronized 几乎没有吸引力。

未来编辑:较新的 os_unfair_lock 的开销甚至比任何一个都低得多

于 2013-09-03T17:04:57.093 回答